1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-04 20:38:50 +01:00

* parse-packet.c (parse_plaintext), packet.h, plaintext.c

(handle_plaintext): Fix bug in handling literal packets with zero-length
data (no data was being confused with partial body length).

* misc.c (pct_expando), options.skel: %t means extension ("jpg"). %T means
MIME type ("image/jpeg").

* import.c (import_one): Only trigger trust update if the keyring is
actually changed.

* export.c (do_export_stream): Missing a m_free.
This commit is contained in:
David Shaw 2002-04-23 02:48:44 +00:00
parent 0f2fedd806
commit 3b9a04844c
8 changed files with 49 additions and 13 deletions

View File

@ -1,3 +1,18 @@
2002-04-22 David Shaw <dshaw@jabberwocky.com>
* parse-packet.c (parse_plaintext), packet.h, plaintext.c
(handle_plaintext): Fix bug in handling literal packets with
zero-length data (no data was being confused with partial body
length).
* misc.c (pct_expando), options.skel: %t means extension ("jpg").
%T means MIME type ("image/jpeg").
* import.c (import_one): Only trigger trust update if the keyring
is actually changed.
* export.c (do_export_stream): Missing a m_free.
2002-04-22 Stefan Bellon <sbellon@sbellon.de>
* keyid.c (expirestr_from_sk, expirestr_from_sig): Added _() to

View File

@ -116,7 +116,7 @@ do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any )
KBNODE keyblock = NULL;
KBNODE kbctx, node;
int ndesc;
KEYDB_SEARCH_DESC *desc;
KEYDB_SEARCH_DESC *desc = NULL;
KEYDB_HANDLE kdbhd;
STRLIST sl;
@ -248,6 +248,7 @@ do_export_stream( IOBUF out, STRLIST users, int secret, int onlyrfc, int *any )
rc = 0;
leave:
m_free(desc);
keydb_release (kdbhd);
release_kbnode( keyblock );
if( !*any )

View File

@ -467,7 +467,6 @@ import_one( const char *fname, KBNODE keyblock, int fast,
return 0;
}
/* do we have this key already in one of our pubrings ? */
pk_orig = m_alloc_clear( sizeof *pk_orig );
rc = get_pubkey( pk_orig, keyid );
@ -497,7 +496,10 @@ import_one( const char *fname, KBNODE keyblock, int fast,
if (rc)
log_error (_("error writing keyring `%s': %s\n"),
keydb_get_resource_name (hd), g10_errstr(rc));
else
revalidation_mark ();
keydb_release (hd);
/* we are ready */
if( !opt.quiet )
log_info( _("key %08lX: public key imported\n"), (ulong)keyid[1]);
@ -568,6 +570,9 @@ import_one( const char *fname, KBNODE keyblock, int fast,
if (rc)
log_error (_("error writing keyring `%s': %s\n"),
keydb_get_resource_name (hd), g10_errstr(rc) );
else
revalidation_mark ();
/* we are ready */
if( !opt.quiet ) {
if( n_uids == 1 )
@ -601,8 +606,6 @@ import_one( const char *fname, KBNODE keyblock, int fast,
}
keydb_release (hd); hd = NULL;
}
if (!rc)
revalidation_mark ();
leave:
release_kbnode( keyblock_orig );

View File

@ -509,14 +509,22 @@ pct_expando(const char *string,PKT_public_key *pk)
}
break;
/* photo type. For now, it's always jpeg so this is
/* photo types. For now, it's always jpeg so this is
easy! */
case 't':
if(idx+4>maxlen)
if(idx+3>maxlen)
goto fail;
strcpy(&ret[idx],"jpeg");
idx+=4;
strcpy(&ret[idx],"jpg");
idx+=3;
break;
case 'T':
if(idx+10>maxlen)
goto fail;
strcpy(&ret[idx],"image/jpeg");
idx+=10;
break;
case '%':

View File

@ -160,7 +160,8 @@ lock-once
# %I is the same as %i, but the file isn't deleted afterwards by GnuPG.
# %k is expanded to the key ID of the key.
# %K is expanded to the long OpenPGP key ID of the key.
# %t is expanded to the type of image (e.g. "jpeg").
# %t is expanded to the extension of the image (e.g. "jpg").
# %T is expanded to the MIME type of the image (e.g. "image/jpeg").
# %f is expanded to the fingerprint of the key.
# %% is %, of course.
#
@ -177,10 +178,10 @@ lock-once
# photo-viewer "display -title 'KeyID 0x%k'"
#
# This one saves a copy of the photo ID in your home directory:
# photo-viewer "cat > ~/photoid-for-key-%k.jpg"
# photo-viewer "cat > ~/photoid-for-key-%k.%t"
#
# Use your MIME handler to view photos:
# photo-viewer "metamail -q -d -b -c image/%t -s 'KeyID 0x%k' -f GnuPG"
# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG"
# Passphrase agent

View File

@ -275,6 +275,7 @@ typedef struct {
u32 len; /* length of encrypted data */
IOBUF buf; /* IOBUF reference */
byte new_ctb;
byte is_partial; /* partial length encoded */
int mode;
u32 timestamp;
int namelen;

View File

@ -1928,7 +1928,7 @@ parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen,
PACKET *pkt, int new_ctb )
{
int rc = 0;
int mode, namelen;
int mode, namelen, partial=0;
PKT_plaintext *pt;
byte *p;
int c, i;
@ -1938,12 +1938,18 @@ parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen,
rc = G10ERR_INVALID_PACKET;
goto leave;
}
/* A packet length of zero indicates partial body length. A zero
data length isn't a zero length packet due to the header (mode,
name, etc), so this is accurate. */
if(pktlen==0)
partial=1;
mode = iobuf_get_noeof(inp); if( pktlen ) pktlen--;
namelen = iobuf_get_noeof(inp); if( pktlen ) pktlen--;
pt = pkt->pkt.plaintext = m_alloc(sizeof *pkt->pkt.plaintext + namelen -1);
pt->new_ctb = new_ctb;
pt->mode = mode;
pt->namelen = namelen;
pt->is_partial = partial;
if( pktlen ) {
for( i=0; pktlen > 4 && i < namelen; pktlen--, i++ )
pt->name[i] = iobuf_get_noeof(inp);

View File

@ -114,7 +114,8 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
goto leave;
}
if( pt->len ) {
if( !pt->is_partial ) {
/* we have an actual length (which might be zero). */
assert( !clearsig );
if( convert ) { /* text mode */
for( ; pt->len; pt->len-- ) {