diff options
author | Aki <please@ignore.pl> | 2022-08-11 21:22:46 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-08-11 21:22:46 +0200 |
commit | ca3cabf0670f1d313412f6eb0db7dad3a5e6be56 (patch) | |
tree | 9010e075385cb881994a6b393726a2ef662bc54c /ArchiveEx | |
parent | a1bb81360e7f1964498de82dfc0c3f6ff3037182 (diff) | |
download | starshatter-ca3cabf0670f1d313412f6eb0db7dad3a5e6be56.zip starshatter-ca3cabf0670f1d313412f6eb0db7dad3a5e6be56.tar.gz starshatter-ca3cabf0670f1d313412f6eb0db7dad3a5e6be56.tar.bz2 |
Fixed null-terminated extraction
Diffstat (limited to 'ArchiveEx')
-rw-r--r-- | ArchiveEx/Archive.cpp | 6 |
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; } |