From a4fd67937ccc1ce72c3500dba3240bf383a7632c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 5 May 2009 09:30:34 +0000 Subject: [PATCH] Fix bug#931. Silent a compiler warning. --- g10/ChangeLog | 9 +++++++++ g10/parse-packet.c | 49 +++++++++++++++++++++++++++------------------- g10/tdbio.c | 16 +++++++-------- 3 files changed, 46 insertions(+), 28 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index 5846dc27d..af6bf0981 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,12 @@ +2009-05-05 Werner Koch + + * tdbio.c (lookup_hashtable): Add const to function args. + (cmp_trec_fpr): Ditto. + (tdbio_search_trust_byfpr): Remove cast. + + * parse-packet.c (parse): Remove special treatment for compressed + new style packets. Fixes bug#931. + 2009-04-03 Werner Koch * gpgv.c (main): Pass readonly flag to keydb_add_resource. diff --git a/g10/parse-packet.c b/g10/parse-packet.c index 61c289cf8..c614ca264 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -346,12 +346,19 @@ parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos, rc = G10ERR_INVALID_PACKET; goto leave; } - if (pkttype == PKT_COMPRESSED) { - iobuf_set_partial_block_mode(inp, c & 0xff); - pktlen = 0;/* to indicate partial length */ - partial=1; - } - else { +/* The follwing code has been here for ages (2002-08-30) but it is + clearly wrong: For example passing a 0 as second argument to + iobuf_set_partial_block_mode stops the partial block mode which we + definitely do not want. Also all values < 224 or 255 are not + valid. Let's disable it and put PKT_COMPRESSED into the list of + allowed packets with partial header until someone complains. */ +/* if (pkttype == PKT_COMPRESSED) { */ +/* iobuf_set_partial_block_mode(inp, c & 0xff); */ +/* pktlen = 0;/\* to indicate partial length *\/ */ +/* partial=1; */ +/* } */ +/* else { */ + { hdr[hdrlen++] = c; if( c < 192 ) pktlen = c; @@ -384,20 +391,22 @@ parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos, } else { - /* Partial body length. Note that we handled - PKT_COMPRESSED earlier. */ - if(pkttype==PKT_PLAINTEXT || pkttype==PKT_ENCRYPTED - || pkttype==PKT_ENCRYPTED_MDC) - { - iobuf_set_partial_block_mode(inp, c & 0xff); - pktlen = 0;/* to indicate partial length */ - partial=1; - } - else - { - log_error("%s: partial length for invalid" - " packet type %d\n",iobuf_where(inp),pkttype); - rc=G10ERR_INVALID_PACKET; + /* Partial body length. */ + switch (pkttype) + { + case PKT_PLAINTEXT: + case PKT_ENCRYPTED: + case PKT_ENCRYPTED_MDC: + case PKT_COMPRESSED: + iobuf_set_partial_block_mode (inp, (c & 0xff)); + pktlen = 0; /* Indicate partial length. */ + partial= 1; + break; + + default: + log_error ("%s: partial length for invalid" + " packet type %d\n", iobuf_where(inp),pkttype); + rc = G10ERR_INVALID_PACKET; goto leave; } } diff --git a/g10/tdbio.c b/g10/tdbio.c index 8fc02bc82..cdfc27a6b 100644 --- a/g10/tdbio.c +++ b/g10/tdbio.c @@ -1007,8 +1007,8 @@ drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) */ static int lookup_hashtable( ulong table, const byte *key, size_t keylen, - int (*cmpfnc)(void*, const TRUSTREC *), void *cmpdata, - TRUSTREC *rec ) + int (*cmpfnc)(const void*, const TRUSTREC *), + const void *cmpdata, TRUSTREC *rec ) { int rc; ulong hashrec, item; @@ -1464,10 +1464,10 @@ tdbio_new_recnum() static int -cmp_trec_fpr ( void *fpr, const TRUSTREC *rec ) +cmp_trec_fpr (const void *fpr, const TRUSTREC *rec ) { - return rec->rectype == RECTYPE_TRUST - && !memcmp( rec->r.trust.fingerprint, fpr, 20); + return (rec->rectype == RECTYPE_TRUST + && !memcmp( rec->r.trust.fingerprint, fpr, 20)); } @@ -1476,9 +1476,9 @@ tdbio_search_trust_byfpr( const byte *fingerprint, TRUSTREC *rec ) { int rc; - /* locate the trust record using the hash table */ - rc = lookup_hashtable( get_trusthashrec(), fingerprint, 20, - cmp_trec_fpr, (void*)fingerprint, rec ); + /* Locate the trust record using the hash table. */ + rc = lookup_hashtable (get_trusthashrec(), fingerprint, 20, + cmp_trec_fpr, fingerprint, rec); return rc; }