From d6e9b96e2f16dd7aa37e580e5c2b10c15fc82426 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Thu, 19 Jul 2018 09:53:35 -0400 Subject: fsp_srv: Respect write length in Write() Previously we were just copying the data whole-sale, even if the length was less than the total data size. This effectively makes the actual_data vector useless, which is likely not intended. Instead, amend this to only copy the given length amount of data. At the same time, we can avoid zeroing out the data before using it by passing iterators to the constructor instead of a size. --- src/core/hle/service/filesystem/fsp_srv.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index 1b003bd84..e3f237c5c 100644 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp @@ -3,6 +3,8 @@ // Refer to the license.txt file included. #include +#include + #include "common/logging/log.h" #include "common/string_util.h" #include "core/core.h" @@ -133,17 +135,16 @@ private: return; } - std::vector data = ctx.ReadBuffer(); - std::vector actual_data(length); + const std::vector data = ctx.ReadBuffer(); ASSERT_MSG( data.size() <= length, "Attempting to write more data than requested (requested={:016X}, actual={:016X}).", length, data.size()); - std::copy(data.begin(), data.end(), actual_data.begin()); // Write the data to the Storage backend - auto written = backend->WriteBytes(data, offset); + std::vector actual_data(data.begin(), data.begin() + length); + const auto written = backend->WriteBytes(std::move(actual_data), offset); ASSERT_MSG(written == length, "Could not write all bytes to file (requested={:016X}, actual={:016X}).", length, -- cgit v1.2.3