]> code.delx.au - gnu-emacs/commitdiff
Fix decompress gap handling bug
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Sun, 11 Aug 2013 20:51:47 +0000 (22:51 +0200)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Sun, 11 Aug 2013 20:51:47 +0000 (22:51 +0200)
* decompress.c (Fdecompress_gzipped_region): Respect all zlib
errors, and really move the gap to where we want it.

src/ChangeLog
src/decompress.c

index 340e8407b33e37a50f2b4ba8d437566ecdd630c3..1780bf4e7971f29218b7415dcbaafde31dc84b41 100644 (file)
@@ -1,5 +1,8 @@
 2013-08-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
+       * 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.
index 18f7884a4c28bc57adb8a95cb5630bb37965c3ed..a6323a843e91dfc6f5198447949a4f7e666a9dde 100644 (file)
@@ -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;
     }