diff options
Diffstat (limited to 'g10/parse-packet.c')
-rw-r--r-- | g10/parse-packet.c | 49 |
1 files changed, 29 insertions, 20 deletions
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; } } |