mirror of
git://git.gnupg.org/gnupg.git
synced 2025-03-28 22:49:59 +01:00
* keygen.c (make_backsig): Make sure that the backsig was built
successfully before we try and use it.
This commit is contained in:
parent
d25162fa19
commit
3659850b1b
@ -1,3 +1,8 @@
|
|||||||
|
2004-06-16 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
|
* keygen.c (make_backsig): Make sure that the backsig was built
|
||||||
|
successfully before we try and use it.
|
||||||
|
|
||||||
2004-06-16 Werner Koch <wk@gnupg.org>
|
2004-06-16 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* free-packet.c (copy_secret_key): Get last fix right.
|
* free-packet.c (copy_secret_key): Get last fix right.
|
||||||
|
104
g10/keygen.c
104
g10/keygen.c
@ -551,69 +551,73 @@ make_backsig(PKT_signature *sig, PKT_public_key *pk,
|
|||||||
/* get it into a binary packed form. */
|
/* get it into a binary packed form. */
|
||||||
IOBUF backsig_out=iobuf_temp();
|
IOBUF backsig_out=iobuf_temp();
|
||||||
PACKET backsig_pkt;
|
PACKET backsig_pkt;
|
||||||
byte *buf;
|
|
||||||
size_t pktlen=0;
|
|
||||||
|
|
||||||
init_packet(&backsig_pkt);
|
init_packet(&backsig_pkt);
|
||||||
backsig_pkt.pkttype=PKT_SIGNATURE;
|
backsig_pkt.pkttype=PKT_SIGNATURE;
|
||||||
backsig_pkt.pkt.signature=backsig;
|
backsig_pkt.pkt.signature=backsig;
|
||||||
build_packet(backsig_out,&backsig_pkt);
|
rc=build_packet(backsig_out,&backsig_pkt);
|
||||||
free_packet(&backsig_pkt);
|
free_packet(&backsig_pkt);
|
||||||
buf=iobuf_get_temp_buffer(backsig_out);
|
if(rc)
|
||||||
|
log_error("build_packet failed for backsig: %s\n",g10_errstr(rc));
|
||||||
/* Remove the packet header */
|
|
||||||
if(buf[0]&0x40)
|
|
||||||
{
|
|
||||||
if(buf[1]<192)
|
|
||||||
{
|
|
||||||
pktlen=buf[1];
|
|
||||||
buf+=2;
|
|
||||||
}
|
|
||||||
else if(buf[1]<224)
|
|
||||||
{
|
|
||||||
pktlen=(buf[1]-192)*256;
|
|
||||||
pktlen+=buf[2]+192;
|
|
||||||
buf+=3;
|
|
||||||
}
|
|
||||||
else if(buf[1]==255)
|
|
||||||
{
|
|
||||||
pktlen =buf[2] << 24;
|
|
||||||
pktlen|=buf[3] << 16;
|
|
||||||
pktlen|=buf[4] << 8;
|
|
||||||
pktlen|=buf[5];
|
|
||||||
buf+=6;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int mark=1;
|
size_t pktlen=0;
|
||||||
|
byte *buf=iobuf_get_temp_buffer(backsig_out);
|
||||||
|
|
||||||
switch(buf[0]&3)
|
/* Remove the packet header */
|
||||||
{
|
if(buf[0]&0x40)
|
||||||
case 3:
|
{
|
||||||
BUG();
|
if(buf[1]<192)
|
||||||
break;
|
{
|
||||||
|
pktlen=buf[1];
|
||||||
|
buf+=2;
|
||||||
|
}
|
||||||
|
else if(buf[1]<224)
|
||||||
|
{
|
||||||
|
pktlen=(buf[1]-192)*256;
|
||||||
|
pktlen+=buf[2]+192;
|
||||||
|
buf+=3;
|
||||||
|
}
|
||||||
|
else if(buf[1]==255)
|
||||||
|
{
|
||||||
|
pktlen =buf[2] << 24;
|
||||||
|
pktlen|=buf[3] << 16;
|
||||||
|
pktlen|=buf[4] << 8;
|
||||||
|
pktlen|=buf[5];
|
||||||
|
buf+=6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
BUG();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int mark=1;
|
||||||
|
|
||||||
case 2:
|
switch(buf[0]&3)
|
||||||
pktlen =buf[mark++] << 24;
|
{
|
||||||
pktlen|=buf[mark++] << 16;
|
case 3:
|
||||||
|
BUG();
|
||||||
|
break;
|
||||||
|
|
||||||
case 1:
|
case 2:
|
||||||
pktlen|=buf[mark++] << 8;
|
pktlen =buf[mark++] << 24;
|
||||||
|
pktlen|=buf[mark++] << 16;
|
||||||
|
|
||||||
case 0:
|
case 1:
|
||||||
pktlen|=buf[mark++];
|
pktlen|=buf[mark++] << 8;
|
||||||
}
|
|
||||||
|
|
||||||
buf+=mark;
|
case 0:
|
||||||
}
|
pktlen|=buf[mark++];
|
||||||
|
}
|
||||||
|
|
||||||
/* now make the binary blob into a subpacket */
|
buf+=mark;
|
||||||
build_sig_subpkt(sig,SIGSUBPKT_SIGNATURE,buf,pktlen);
|
}
|
||||||
|
|
||||||
|
/* now make the binary blob into a subpacket */
|
||||||
|
build_sig_subpkt(sig,SIGSUBPKT_SIGNATURE,buf,pktlen);
|
||||||
|
|
||||||
iobuf_close(backsig_out);
|
iobuf_close(backsig_out);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user