* mpicoder.c (mpi_read): If we must fail due to a oversize (generally
authorDavid Shaw <dshaw@jabberwocky.com>
Thu, 30 Sep 2004 04:07:23 +0000 (04:07 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Thu, 30 Sep 2004 04:07:23 +0000 (04:07 +0000)
corrupt) MPI, make sure the number of bytes we read is valid so we can
skip the rest of the bad packet (in hopes the whole stream isn't invalid).

mpi/ChangeLog
mpi/mpicoder.c

index 4058117..a595bc1 100644 (file)
@@ -1,3 +1,10 @@
+2004-09-29  David Shaw  <dshaw@jabberwocky.com>
+
+       * mpicoder.c (mpi_read): If we must fail due to a oversize
+       (generally corrupt) MPI, make sure the number of bytes we read is
+       valid so we can skip the rest of the bad packet (in hopes the
+       whole stream isn't invalid).
+
 2004-05-20  David Shaw  <dshaw@jabberwocky.com>
 
        * longlong.h: Typo.
index 4aaf2c0..0005f21 100644 (file)
@@ -80,15 +80,16 @@ mpi_read(IOBUF inp, unsigned *ret_nread, int secure)
 
     if( (c = iobuf_get(inp)) == -1 )
        goto leave;
+    nread++;
     nbits = c << 8;
     if( (c = iobuf_get(inp)) == -1 )
        goto leave;
+    nread++;
     nbits |= c;
     if( nbits > MAX_EXTERN_MPI_BITS ) {
        log_error("mpi too large (%u bits)\n", nbits);
        goto leave;
     }
-    nread = 2;
 
     nbytes = (nbits+7) / 8;
     nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;