From: Michihiro NAKAJIMA Date: Fri, 30 Oct 2009 10:31:07 +0000 (-0400) Subject: Make sure a line is fully read before checking it for bidding X-Git-Tag: v2.8.0~269 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cceb8f2df452d59ef8c5a07d0b531c19343dd974;p=thirdparty%2Flibarchive.git Make sure a line is fully read before checking it for bidding for uudecode. SVN-Revision: 1546 --- diff --git a/libarchive/archive_read_support_compression_uu.c b/libarchive/archive_read_support_compression_uu.c index 1df30c0e2..80cb2dcc7 100644 --- a/libarchive/archive_read_support_compression_uu.c +++ b/libarchive/archive_read_support_compression_uu.c @@ -244,9 +244,12 @@ uudecode_bidder_bid(struct archive_read_filter_bidder *self, firstline = 20; ravail = avail; while (avail) { - if (memcmp(b, "begin ", 6) == 0 && avail > 11) + len = bid_get_line(filter, &b, &avail, &ravail, &nl); + if (len < 0 || nl == 0) + return (0);/* Binary data. */ + if (memcmp(b, "begin ", 6) == 0 && len >= 11) l = 6; - else if (memcmp(b, "begin-base64 ", 13) == 0 && avail > 18) + else if (memcmp(b, "begin-base64 ", 13) == 0 && len >= 18) l = 13; else l = 0; @@ -256,9 +259,6 @@ uudecode_bidder_bid(struct archive_read_filter_bidder *self, b[l+2] < '0' || b[l+2] > '7' || b[l+3] != ' ')) l = 0; - len = bid_get_line(filter, &b, &avail, &ravail, &nl); - if (len < 0 || nl == 0) - return (0);/* Binary data. */ b += len; avail -= len; if (l)