Module Name: src
Committed By: christos
Date: Tue Aug 16 03:33:37 UTC 2011
Modified Files:
src/external/bsd/libarchive/dist/libarchive:
archive_read_support_compression_compress.c
Log Message:
provisional fix for CVS-2011-2895, buffer overflow during decompress
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.2 -r1.2 \
src/external/bsd/libarchive/dist/libarchive/archive_read_support_compression_compress.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_support_compression_compress.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_support_compression_compress.c:1.1.1.2 src/external/bsd/libarchive/dist/libarchive/archive_read_support_compression_compress.c:1.2
--- src/external/bsd/libarchive/dist/libarchive/archive_read_support_compression_compress.c:1.1.1.2 Fri Feb 19 21:48:30 2010
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_support_compression_compress.c Mon Aug 15 23:33:37 2011
@@ -362,6 +362,7 @@
}
if (code > state->free_ent) {
+out:
/* An invalid code is a fatal error. */
archive_set_error(&(self->archive->archive), -1,
"Invalid compressed data");
@@ -376,6 +377,11 @@
/* Generate output characters in reverse order. */
while (code >= 256) {
+ // XXX: long -> ptrdiff_t, but don't want to bother with
+ // autoconf for now.
+ if (state->stackp - state->stack >=
+ (long)(sizeof(state->stack) - 1))
+ goto out;
*state->stackp++ = state->suffix[code];
code = state->prefix[code];
}