summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-08-11 21:22:46 +0200
committerAki <please@ignore.pl>2022-08-11 21:22:46 +0200
commitca3cabf0670f1d313412f6eb0db7dad3a5e6be56 (patch)
tree9010e075385cb881994a6b393726a2ef662bc54c
parenta1bb81360e7f1964498de82dfc0c3f6ff3037182 (diff)
downloadstarshatter-ca3cabf0670f1d313412f6eb0db7dad3a5e6be56.zip
starshatter-ca3cabf0670f1d313412f6eb0db7dad3a5e6be56.tar.gz
starshatter-ca3cabf0670f1d313412f6eb0db7dad3a5e6be56.tar.bz2
Fixed null-terminated extraction
-rw-r--r--ArchiveEx/Archive.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/ArchiveEx/Archive.cpp b/ArchiveEx/Archive.cpp
index 8ca7b71..0a99982 100644
--- a/ArchiveEx/Archive.cpp
+++ b/ArchiveEx/Archive.cpp
@@ -78,14 +78,14 @@ Archive::Expand(const int index, std::uint8_t*& buffer, const bool null_terminat
const std::size_t length = std::fread(compressed.data(), 1, entry.compressed_size, file.get());
if (entry.compressed_size != length)
return -1;
- uLongf output_length = entry.original_size + static_cast<uLongf>(null_terminated);
- auto uncompressed = std::make_unique<std::uint8_t[]>(output_length);
+ uLongf output_length = entry.original_size;
+ auto uncompressed = std::make_unique<std::uint8_t[]>(output_length + null_terminated);
err = uncompress(uncompressed.get(), &output_length, compressed.data(), entry.compressed_size);
if (Z_OK != err)
return -1;
buffer = uncompressed.release();
if (null_terminated)
- buffer[output_length - 1] = 0;
+ buffer[output_length] = 0;
return output_length;
}