diff options
author | Xin LI <delphij@FreeBSD.org> | 2023-03-19 17:03:12 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2023-03-19 17:03:12 +0000 |
commit | 88417d17c2970465bece68bcd525713706ad291c (patch) | |
tree | aa31ac751238e1bf9cb6774bb8850d6d1b148e82 /src/liblzma/common/common.c | |
parent | 2690f2feae431e93f56521baf8c072d32ee1be6a (diff) | |
download | src-88417d17c2970465bece68bcd525713706ad291c.tar.gz src-88417d17c2970465bece68bcd525713706ad291c.zip |
Vendor import of xz 5.4.2 (trimmed)vendor/xz/5.4.2
Diffstat (limited to 'src/liblzma/common/common.c')
-rw-r--r-- | src/liblzma/common/common.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/liblzma/common/common.c b/src/liblzma/common/common.c index a708fdf187a6..baad3dd84c7b 100644 --- a/src/liblzma/common/common.c +++ b/src/liblzma/common/common.c @@ -288,13 +288,21 @@ lzma_code(lzma_stream *strm, lzma_action action) strm->next_in, &in_pos, strm->avail_in, strm->next_out, &out_pos, strm->avail_out, action); - strm->next_in += in_pos; - strm->avail_in -= in_pos; - strm->total_in += in_pos; + // Updating next_in and next_out has to be skipped when they are NULL + // to avoid null pointer + 0 (undefined behavior). Do this by checking + // in_pos > 0 and out_pos > 0 because this way NULL + non-zero (a bug) + // will get caught one way or other. + if (in_pos > 0) { + strm->next_in += in_pos; + strm->avail_in -= in_pos; + strm->total_in += in_pos; + } - strm->next_out += out_pos; - strm->avail_out -= out_pos; - strm->total_out += out_pos; + if (out_pos > 0) { + strm->next_out += out_pos; + strm->avail_out -= out_pos; + strm->total_out += out_pos; + } strm->internal->avail_in = strm->avail_in; |