1
0
ミラー元 https://git.tukaani.org/xz.git 前回の同期 2025-07-01 18:06:37 +00:00

lzmainfo: Avoid integer overflow

The MB output can overflow with huge numbers. Most likely these are
invalid .lzma files anyway, but let's avoid garbage output.

lzmadec was adapted from LZMA Utils. The original code with this bug
was written in 2005, over 19 years ago.

Co-authored-by: Lasse Collin <lasse.collin@tukaani.org>
Closes: https://github.com/tukaani-project/xz/pull/144
このコミットが含まれているのは:
Tobias Stoeckmann 2024-09-16 23:19:46 +02:00 committed by Lasse Collin
コミット 76cfd0a9bb

ファイルの表示

@ -149,8 +149,7 @@ lzmainfo(const char *name, FILE *f)
printf("Unknown"); printf("Unknown");
else else
printf("%" PRIu64 " MB (%" PRIu64 " bytes)", printf("%" PRIu64 " MB (%" PRIu64 " bytes)",
(uncompressed_size + 512 * 1024) (uncompressed_size / 1024 + 512) / 1024,
/ (1024 * 1024),
uncompressed_size); uncompressed_size);
lzma_options_lzma *opt = filter.options; lzma_options_lzma *opt = filter.options;
@ -160,7 +159,7 @@ lzmainfo(const char *name, FILE *f)
"Literal context bits (lc): %" PRIu32 "\n" "Literal context bits (lc): %" PRIu32 "\n"
"Literal pos bits (lp): %" PRIu32 "\n" "Literal pos bits (lp): %" PRIu32 "\n"
"Number of pos bits (pb): %" PRIu32 "\n", "Number of pos bits (pb): %" PRIu32 "\n",
(opt->dict_size + 512 * 1024) / (1024 * 1024), (opt->dict_size / 1024 + 512) / 1024,
my_log2(opt->dict_size), opt->lc, opt->lp, opt->pb); my_log2(opt->dict_size), opt->lc, opt->lp, opt->pb);
free(opt); free(opt);