mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
* build-packet.c (write_header2): Remove call to start old gpg partial
length mode and change all callers. (do_plaintext): Turn off partial length encoding now that we're done writing the packet. (do_comment, do_user_id): Try for a headerlen of 2 since that's the smallest and most likely encoding for these packets. * parse-packet.c (parse): Remove call to start old gpg partial length mode.
This commit is contained in:
parent
2d7fe1d3a1
commit
56a6945261
3 changed files with 88 additions and 76 deletions
|
@ -383,42 +383,34 @@ parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos,
|
|||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
pkttype = (ctb>>2)&0xf;
|
||||
lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
|
||||
if( !lenbytes ) {
|
||||
if( !lenbytes )
|
||||
{
|
||||
pktlen = 0; /* don't know the value */
|
||||
/* This isn't really partial, but we can treat it the same
|
||||
in a "read until the end" sort of way. */
|
||||
partial=1;
|
||||
switch (pkttype) {
|
||||
case PKT_ENCRYPTED:
|
||||
case PKT_PLAINTEXT:
|
||||
/* These partial length encodings are from an very
|
||||
early GnuPG release and deprecated. However we
|
||||
still support them read-wise. Note, that we should
|
||||
not allow them for any key related packets, because
|
||||
this might render a keyring unusable if an errenous
|
||||
packet indicated this mode but not complying to it
|
||||
gets imported. */
|
||||
iobuf_set_block_mode(inp, 1);
|
||||
break;
|
||||
|
||||
case PKT_COMPRESSED:
|
||||
break; /* the orginal pgp 2 way. */
|
||||
|
||||
default:
|
||||
log_error ("%s: old style partial length for invalid"
|
||||
" packet type %d\n", iobuf_where(inp), pkttype );
|
||||
rc = G10ERR_INVALID_PACKET;
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for( ; lenbytes; lenbytes-- ) {
|
||||
if(pkttype!=PKT_ENCRYPTED && pkttype!=PKT_PLAINTEXT
|
||||
&& pkttype!=PKT_COMPRESSED)
|
||||
{
|
||||
log_error ("%s: indeterminate length for invalid"
|
||||
" packet type %d\n", iobuf_where(inp), pkttype );
|
||||
rc = G10ERR_INVALID_PACKET;
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for( ; lenbytes; lenbytes-- )
|
||||
{
|
||||
pktlen <<= 8;
|
||||
pktlen |= hdr[hdrlen++] = iobuf_get_noeof(inp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pktlen == 0xffffffff) {
|
||||
/* with a some probability this is caused by a problem in the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue