Fix bug#931.
authorWerner Koch <wk@gnupg.org>
Tue, 5 May 2009 09:30:34 +0000 (09:30 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 5 May 2009 09:30:34 +0000 (09:30 +0000)
Silent a compiler warning.

g10/ChangeLog
g10/parse-packet.c
g10/tdbio.c

index 5846dc2..af6bf09 100644 (file)
@@ -1,3 +1,12 @@
+2009-05-05  Werner Koch  <wk@g10code.com>
+
+       * 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  <wk@g10code.com>
 
        * gpgv.c (main): Pass readonly flag to keydb_add_resource.
index 61c289c..c614ca2 100644 (file)
@@ -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;
                   }
               }
index 8fc02bc..cdfc27a 100644 (file)
@@ -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_hashtableget_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;
 }