From d2a08aeff989f0cbb66ea04344ac47d4ea1b0b68 Mon Sep 17 00:00:00 2001 From: Michihiro NAKAJIMA Date: Mon, 8 Oct 2012 11:02:05 +0900 Subject: [PATCH] Fix decoded data loss in uudecode filter. --- libarchive/archive_read_support_filter_uu.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libarchive/archive_read_support_filter_uu.c b/libarchive/archive_read_support_filter_uu.c index a75ef7560..4afb5ae11 100644 --- a/libarchive/archive_read_support_filter_uu.c +++ b/libarchive/archive_read_support_filter_uu.c @@ -545,7 +545,7 @@ read_more: break; case ST_READ_UU: if (total + len * 2 > OUT_BUFF_SIZE) - break; + goto finish; body = len - nl; if (!uuchar[*b] || body <= 0) { archive_set_error(&self->archive->archive, @@ -611,7 +611,7 @@ read_more: break; case ST_READ_BASE64: if (total + len * 2 > OUT_BUFF_SIZE) - break; + goto finish; l = len - nl; if (l >= 3 && b[0] == '=' && b[1] == '=' && b[2] == '=') { @@ -657,8 +657,10 @@ read_more: break; } } - - __archive_read_filter_consume(self->upstream, ravail); +finish: + if (ravail < avail_in) + used -= avail_in - ravail; + __archive_read_filter_consume(self->upstream, used); *buff = uudecode->out_buff; uudecode->total += total; -- 2.47.2