Use LZMA_PROG_ERROR in lzma_code() as documented in base.h.
authorLasse Collin <lasse.collin@tukaani.org>
Tue, 20 Jan 2009 08:35:15 +0000 (10:35 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Tue, 20 Jan 2009 08:35:15 +0000 (10:35 +0200)
src/liblzma/common/common.c

index dc43fad..92308fe 100644 (file)
@@ -192,34 +192,26 @@ lzma_code(lzma_stream *strm, lzma_action action)
                break;
 
        case ISEQ_SYNC_FLUSH:
-               if (action != LZMA_SYNC_FLUSH)
+               // The same action must be used until we return
+               // LZMA_STREAM_END, and the amount of input must not change.
+               if (action != LZMA_SYNC_FLUSH
+                               || strm->internal->avail_in != strm->avail_in)
                        return LZMA_PROG_ERROR;
 
-               // Check that application doesn't change avail_in once
-               // LZMA_SYNC_FLUSH has been used.
-               if (strm->internal->avail_in != strm->avail_in)
-                       return LZMA_DATA_ERROR;
-
                break;
 
        case ISEQ_FULL_FLUSH:
-               if (action != LZMA_FULL_FLUSH)
+               if (action != LZMA_FULL_FLUSH
+                               || strm->internal->avail_in != strm->avail_in)
                        return LZMA_PROG_ERROR;
 
-               // Check that application doesn't change avail_in once
-               // LZMA_FULL_FLUSH has been used.
-               if (strm->internal->avail_in != strm->avail_in)
-                       return LZMA_DATA_ERROR;
-
                break;
 
        case ISEQ_FINISH:
-               if (action != LZMA_FINISH)
+               if (action != LZMA_FINISH
+                               || strm->internal->avail_in != strm->avail_in)
                        return LZMA_PROG_ERROR;
 
-               if (strm->internal->avail_in != strm->avail_in)
-                       return LZMA_DATA_ERROR;
-
                break;
 
        case ISEQ_END: