Add missing error check to coder.c.
authorLasse Collin <lasse.collin@tukaani.org>
Wed, 25 Nov 2009 12:22:19 +0000 (14:22 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Wed, 25 Nov 2009 12:22:19 +0000 (14:22 +0200)
With bad luck this could cause a segfault due to
reading (but not writing) past the end of the buffer.

src/xz/coder.c

index d58e7e3..0ab8e46 100644 (file)
@@ -617,17 +617,19 @@ coder_run(const char *filename)
        strm.next_in = in_buf.u8;
        strm.avail_in = io_read(pair, &in_buf, IO_BUFFER_SIZE);
 
-       switch (coder_init(pair)) {
-       case CODER_INIT_NORMAL:
-               success = coder_normal(pair);
-               break;
+       if (strm.avail_in != SIZE_MAX) {
+               switch (coder_init(pair)) {
+               case CODER_INIT_NORMAL:
+                       success = coder_normal(pair);
+                       break;
 
-       case CODER_INIT_PASSTHRU:
-               success = coder_passthru(pair);
-               break;
+               case CODER_INIT_PASSTHRU:
+                       success = coder_passthru(pair);
+                       break;
 
-       case CODER_INIT_ERROR:
-               break;
+               case CODER_INIT_ERROR:
+                       break;
+               }
        }
 
        message_progress_end(success);