2002-06-03 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Sun, 2 Jun 2002 23:09:16 +0000 (23:09 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Sun, 2 Jun 2002 23:09:16 +0000 (23:09 +0000)
* key.c: Include <ctype.h>.
(_gpgme_key_append_name): Skip one more char when
processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
Handle hexadecimal encodings.  Also reported by Marc.  Thanks!

gpgme/ChangeLog
gpgme/key.c

index d09c4ffe1ee3119db856edcd0149b0dbc0922f1d..3074014c1d61816d21991c543750d77bb34dffa3 100644 (file)
@@ -1,3 +1,10 @@
+2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
+
+       * key.c: Include <ctype.h>.
+       (_gpgme_key_append_name): Skip one more char when
+       processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
+       Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
+
 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
 
        * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
index 3196014cd7aff12903464a1c1738681fb41c6874..94973da3cfaa46dbbf7798254cdc42d2ab614671 100644 (file)
@@ -24,6 +24,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <ctype.h>
 
 #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
        {