core: Fix SIG_CREATED status parsing for 0x1F sigs

* src/sign.c (parse_sig_created): Special case the rfc4880 "1F" status.
--

This has always been wrong but we can't simply force strtol to assume
hex.  Patch compiles but has received no specific test.  For details
see
GnuPG-bug-id: 6223
This commit is contained in:
Werner Koch 2022-09-29 09:43:11 +02:00
parent ae9258fbf3
commit b1e5f3b183
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 11 additions and 1 deletions

View File

@ -6265,7 +6265,8 @@ The public key algorithm used to create this signature.
The hash algorithm used to create this signature. The hash algorithm used to create this signature.
@item unsigned int sig_class @item unsigned int sig_class
The signature class of this signature. The signature class of this signature. Note that only the values 0,
1, and 2 are well-defined.
@item long int timestamp @item long int timestamp
The creation timestamp of this signature. The creation timestamp of this signature.

View File

@ -251,7 +251,16 @@ parse_sig_created (char *args, gpgme_new_signature_t *sigp,
} }
args = tail; args = tail;
/* strtol has been used wrongly here. We can't change this anymore
* but we now take care of the 0x1f class which would otherwise let
* us run into an error. */
sig->sig_class = strtol (args, &tail, 0); sig->sig_class = strtol (args, &tail, 0);
if (!errno && args != tail && sig->sig_class == 1
&& (*tail == 'F' || *tail == 'f'))
{
tail++;
sig->sig_class = 131; /* Arbitrary unused value in rfc4880. */
}
sig->class = sig->sig_class; sig->class = sig->sig_class;
sig->_obsolete_class = sig->sig_class; sig->_obsolete_class = sig->sig_class;
if (errno || args == tail || *tail != ' ') if (errno || args == tail || *tail != ' ')