From bb61191aad98c3dbb487c1f76dd1552d44a52fe3 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 30 Mar 2017 10:35:20 +0200 Subject: [PATCH] gpg: Fix exporting of zero length user ID packets. * g10/build-packet.c (do_user_id): Avoid indeterminate length header. -- We are able to import such user ids but when exporting them the exported data could not be imported again because the parser bails out on invalid keyrings. This is now fixed and should be backported. Note that in 1.4 and 2.0 this is only an issue for attribute packets. In 2.1 user IDs were also affected.a Signed-off-by: Werner Koch --- g10/build-packet.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/g10/build-packet.c b/g10/build-packet.c index 028d064a0..2e9dfa4b6 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -204,7 +204,12 @@ do_user_id( IOBUF out, int ctb, PKT_user_id *uid ) { if( uid->attrib_data ) { - write_header(out, ctb, uid->attrib_len); + /* We need to take special care of a user ID with a length of 0: + * Without forcing HDRLEN to 2 in this case an indeterminate length + * packet would be written which is not allowed. Note that we are + * always called with a CTB indicating an old packet header format, + * so that forcing a 2 octet header works. */ + write_header2(out, ctb, uid->attrib_len, (uid->attrib_len? 0 : 2)); if( iobuf_write( out, uid->attrib_data, uid->attrib_len ) ) return G10ERR_WRITE_FILE; }