[svn] GnuPG - r4333 - trunk/g10
svn author wk
cvs at cvs.gnupg.org
Fri Nov 10 12:32:02 CET 2006
Author: wk
Date: 2006-11-10 12:32:00 +0100 (Fri, 10 Nov 2006)
New Revision: 4333
Modified:
trunk/g10/ChangeLog
trunk/g10/parse-packet.c
Log:
Fixed that nasty 64 bit but.
Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog 2006-11-09 16:09:46 UTC (rev 4332)
+++ trunk/g10/ChangeLog 2006-11-10 11:32:00 UTC (rev 4333)
@@ -1,3 +1,10 @@
+2006-11-10 Werner Koch <wk at g10code.com>
+
+ * parse-packet.c (mpi_read): Changed NREAD to size_t to match the
+ gcry_mpi-scan prototype.
+ (mpi_read): Fixed double increment of bytes read to correctly
+ detect overlong MPIs.
+
2006-11-05 Werner Koch <wk at g10code.com>
* gpg.c (main): Remove the default --require-cross-certification.
Modified: trunk/g10/parse-packet.c
===================================================================
--- trunk/g10/parse-packet.c 2006-11-09 16:09:46 UTC (rev 4332)
+++ trunk/g10/parse-packet.c 2006-11-10 11:32:00 UTC (rev 4333)
@@ -112,41 +112,41 @@
/*FIXME: Needs to be synced with gnupg14/mpi/mpicoder.c*/
int c, c1, c2, i;
- unsigned int nbits, nbytes, nread=0;
+ unsigned int nbits, nbytes;
+ size_t nread;
gcry_mpi_t a = NULL;
byte *buf = NULL;
byte *p;
- if( (c = c1 = iobuf_get(inp)) == -1 )
+ if ( (c = c1 = iobuf_get (inp)) == -1 )
goto leave;
nbits = c << 8;
- if( (c = c2 = iobuf_get(inp)) == -1 )
+ if ( (c = c2 = iobuf_get (inp)) == -1 )
goto leave;
nbits |= c;
- if( nbits > MAX_EXTERN_MPI_BITS )
+ if ( nbits > MAX_EXTERN_MPI_BITS )
{
log_error("mpi too large (%u bits)\n", nbits);
goto leave;
}
nread = 2;
nbytes = (nbits+7) / 8;
- buf = secure? gcry_xmalloc_secure( nbytes+2 ) : gcry_xmalloc( nbytes+2 );
+ buf = secure ? gcry_xmalloc_secure (nbytes + 2) : gcry_xmalloc (nbytes + 2);
p = buf;
p[0] = c1;
p[1] = c2;
- for( i=0 ; i < nbytes; i++ )
+ for ( i=0 ; i < nbytes; i++ )
{
p[i+2] = iobuf_get(inp) & 0xff;
nread++;
}
- nread += nbytes;
- if( gcry_mpi_scan( &a, GCRYMPI_FMT_PGP, buf, nread, &nread ) )
+ if ( gcry_mpi_scan( &a, GCRYMPI_FMT_PGP, buf, nread, &nread ) )
a = NULL;
leave:
gcry_free(buf);
- if( nread > *ret_nread )
- log_bug("mpi larger than packet");
+ if ( nread > *ret_nread )
+ log_bug ("mpi larger than packet");
else
*ret_nread = nread;
return a;
More information about the Gnupg-commits
mailing list