From: Lars Magne Ingebrigtsen Date: Sun, 11 Aug 2013 20:51:47 +0000 (+0200) Subject: Fix decompress gap handling bug X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1686^2~323 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=99a32242b364793076b4b03310c435d4828ef6e4;p=emacs.git Fix decompress gap handling bug * decompress.c (Fdecompress_gzipped_region): Respect all zlib errors, and really move the gap to where we want it. --- diff --git a/src/ChangeLog b/src/ChangeLog index 340e8407b33..1780bf4e797 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2013-08-11 Lars Magne Ingebrigtsen + * decompress.c (Fdecompress_gzipped_region): Respect all zlib + errors, and really move the gap to where we want it. + * lisp.h: Include decompress.c support. * emacs.c (main): Include decompress.c support. diff --git a/src/decompress.c b/src/decompress.c index 18f7884a4c2..a6323a843e9 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -63,7 +63,6 @@ This function can only be called in unibyte buffers.*/) ptrdiff_t count = SPECPDL_INDEX (); validate_region (&start, &end); - move_gap_both (iend, iend); if (! NILP (BVAR (current_buffer, enable_multibyte_characters))) error ("This function can only be called in unibyte buffers"); @@ -72,6 +71,7 @@ This function can only be called in unibyte buffers.*/) the same. */ istart = XINT (start); iend = XINT (end); + move_gap_both (iend, iend); stream.zalloc = Z_NULL; stream.zfree = Z_NULL; @@ -99,13 +99,11 @@ This function can only be called in unibyte buffers.*/) /* Run inflate() on input until the output buffer isn't full. */ do { + int result; stream.avail_out = BUFFER_SIZE; stream.next_out = out; - switch (inflate (&stream, Z_NO_FLUSH)) { - case Z_STREAM_ERROR: - case Z_NEED_DICT: - case Z_DATA_ERROR: - case Z_MEM_ERROR: + result = inflate (&stream, Z_NO_FLUSH); + if (result < 0) { unbind_to (count, Qnil); return Qnil; }