aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mpi/ChangeLog7
-rw-r--r--mpi/mpicoder.c3
2 files changed, 9 insertions, 1 deletions
diff --git a/mpi/ChangeLog b/mpi/ChangeLog
index 4058117c7..a595bc171 100644
--- a/mpi/ChangeLog
+++ b/mpi/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-29 David Shaw <[email protected]>
+
+ * 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 <[email protected]>
* longlong.h: Typo.
diff --git a/mpi/mpicoder.c b/mpi/mpicoder.c
index 4aaf2c017..0005f21a8 100644
--- a/mpi/mpicoder.c
+++ b/mpi/mpicoder.c
@@ -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;