mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
* parse-packet.c (parse_marker): New. Enforce that the marker
contains 'P', 'G', 'P', and nothing but. (parse): Call it here. (skip_packet): No longer need to handle marker packets here.
This commit is contained in:
parent
61bcf36235
commit
82a8277b6c
@ -1,3 +1,12 @@
|
||||
2007-04-05 David Shaw <dshaw@jabberwocky.com>
|
||||
|
||||
From STABLE-BRANCH-1-4
|
||||
|
||||
* parse-packet.c (parse_marker): New. Enforce that the marker
|
||||
contains 'P', 'G', 'P', and nothing but.
|
||||
(parse): Call it here.
|
||||
(skip_packet): No longer need to handle marker packets here.
|
||||
|
||||
2007-03-14 David Shaw <dshaw@jabberwocky.com>
|
||||
|
||||
From STABLE-BRANCH-1-4
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* parse-packet.c - read packets
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
* 2006 Free Software Foundation, Inc.
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
* 2007 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GnuPG.
|
||||
*
|
||||
@ -52,6 +52,7 @@ static int copy_packet( IOBUF inp, IOBUF out, int pkttype,
|
||||
static void skip_packet( IOBUF inp, int pkttype,
|
||||
unsigned long pktlen, int partial );
|
||||
static void *read_rest( IOBUF inp, size_t pktlen, int partial );
|
||||
static int parse_marker( IOBUF inp, int pkttype, unsigned long pktlen );
|
||||
static int parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen,
|
||||
PACKET *packet );
|
||||
static int parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen,
|
||||
@ -579,6 +580,9 @@ parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos,
|
||||
case PKT_GPG_CONTROL:
|
||||
rc = parse_gpg_control(inp, pkttype, pktlen, pkt, partial );
|
||||
break;
|
||||
case PKT_MARKER:
|
||||
rc = parse_marker(inp,pkttype,pktlen);
|
||||
break;
|
||||
default:
|
||||
skip_packet(inp, pkttype, pktlen, partial);
|
||||
break;
|
||||
@ -644,32 +648,31 @@ copy_packet( IOBUF inp, IOBUF out, int pkttype,
|
||||
static void
|
||||
skip_packet( IOBUF inp, int pkttype, unsigned long pktlen, int partial )
|
||||
{
|
||||
if( list_mode ) {
|
||||
if( pkttype == PKT_MARKER )
|
||||
fputs(":marker packet:\n", listfp );
|
||||
else
|
||||
fprintf (listfp, ":unknown packet: type %2d, length %lu\n",
|
||||
pkttype, pktlen);
|
||||
if( pkttype ) {
|
||||
int c, i=0 ;
|
||||
if( pkttype != PKT_MARKER )
|
||||
fputs("dump:", listfp );
|
||||
if( partial ) {
|
||||
while( (c=iobuf_get(inp)) != -1 )
|
||||
dump_hex_line(c, &i);
|
||||
if( list_mode )
|
||||
{
|
||||
fprintf (listfp, ":unknown packet: type %2d, length %lu\n",
|
||||
pkttype, pktlen);
|
||||
if( pkttype )
|
||||
{
|
||||
int c, i=0 ;
|
||||
fputs("dump:", listfp );
|
||||
if( partial )
|
||||
{
|
||||
while( (c=iobuf_get(inp)) != -1 )
|
||||
dump_hex_line(c, &i);
|
||||
}
|
||||
else {
|
||||
for( ; pktlen; pktlen-- )
|
||||
dump_hex_line(iobuf_get(inp), &i);
|
||||
else
|
||||
{
|
||||
for( ; pktlen; pktlen-- )
|
||||
dump_hex_line(iobuf_get(inp), &i);
|
||||
}
|
||||
putc ('\n', listfp);
|
||||
return;
|
||||
putc ('\n', listfp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
iobuf_skip_rest(inp,pktlen,partial);
|
||||
iobuf_skip_rest(inp,pktlen,partial);
|
||||
}
|
||||
|
||||
|
||||
static void *
|
||||
read_rest( IOBUF inp, size_t pktlen, int partial )
|
||||
{
|
||||
@ -688,7 +691,40 @@ read_rest( IOBUF inp, size_t pktlen, int partial )
|
||||
return p;
|
||||
}
|
||||
|
||||
static int
|
||||
parse_marker( IOBUF inp, int pkttype, unsigned long pktlen )
|
||||
{
|
||||
if(pktlen!=3)
|
||||
goto fail;
|
||||
|
||||
if(iobuf_get(inp)!='P')
|
||||
{
|
||||
pktlen--;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if(iobuf_get(inp)!='G')
|
||||
{
|
||||
pktlen--;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if(iobuf_get(inp)!='P')
|
||||
{
|
||||
pktlen--;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if(list_mode)
|
||||
fputs(":marker packet: PGP\n", listfp );
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
log_error("invalid marker packet\n");
|
||||
iobuf_skip_rest(inp,pktlen,0);
|
||||
return G10ERR_INVALID_PACKET;
|
||||
}
|
||||
|
||||
static int
|
||||
parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet )
|
||||
|
Loading…
x
Reference in New Issue
Block a user