diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index d09c4ffe..3074014c 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,10 @@ +2002-06-03 Marcus Brinkmann + + * key.c: Include . + (_gpgme_key_append_name): Skip one more char when + processing escaped char. Submitted by Marc Mutz . + Handle hexadecimal encodings. Also reported by Marc. Thanks! + 2002-06-02 Marcus Brinkmann * ath.h: Enable the _gpgme_ prefix. Fix all those prefix macros. diff --git a/gpgme/key.c b/gpgme/key.c index 3196014c..94973da3 100644 --- a/gpgme/key.c +++ b/gpgme/key.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "util.h" #include "ops.h" @@ -627,17 +628,28 @@ _gpgme_key_append_name (GpgmeKey key, const char *s) *d++ = '\\'; *d++ = '\0'; } - else if (s[1] == 'x' && my_isdigit (s[2]) && my_isdigit (s[3])) + else if (s[1] == 'x' && isxdigit (s[2]) && isxdigit (s[3])) { - unsigned int val = (s[2]-'0')*16 + (s[3]-'0'); - if (!val) + int val = hextobyte (&s[2]); + if (val == -1) { - *d++ = '\\'; - *d++ = '\0'; - } - else - *(byte*)d++ = val; - s += 3; + /* Should not happen. */ + *d++ = *s++; + *d++ = *s++; + *d++ = *s++; + *d++ = *s++; + } + else + { + if (!val) + { + *d++ = '\\'; + *d++ = '\0'; + } + else + *(byte*)d++ = val; + s += 4; + } } else {