]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Make sure a line is fully read before checking it for bidding
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Fri, 30 Oct 2009 10:31:07 +0000 (06:31 -0400)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Fri, 30 Oct 2009 10:31:07 +0000 (06:31 -0400)
for uudecode.

SVN-Revision: 1546

libarchive/archive_read_support_compression_uu.c

index 1df30c0e29ddd332d5d2443c2e540cbc9be83b0a..80cb2dcc7e536d601c4be9539d0ade70cc4eb481 100644 (file)
@@ -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)