]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
hex: use a table to avoid meaningless assertion
authorDaiki Ueno <ueno@gnu.org>
Tue, 16 Feb 2021 07:39:17 +0000 (08:39 +0100)
committerDaiki Ueno <ueno@gnu.org>
Wed, 17 Feb 2021 05:41:16 +0000 (06:41 +0100)
Reported by Tim Rühsen in:
https://gitlab.com/gnutls/gnutls/-/issues/604

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/extras/hex.c

index 55b64ca30914626fd4a390e41ba31939f137dae1..b88777fed750813044397cdeddcc318ef724a1fc 100644 (file)
@@ -39,14 +39,7 @@ bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize)
        return slen == 0 && bufsize == 0;
 }
 
-static char hexchar(unsigned int val)
-{
-       if (val < 10)
-               return '0' + val;
-       if (val < 16)
-               return 'a' + val - 10;
-       abort();
-}
+static const char HEX_CHARS[] = "0123456789abcdef";
 
 bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize)
 {
@@ -59,8 +52,8 @@ bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize)
                unsigned int c = ((const unsigned char *)buf)[used];
                if (destsize < 3)
                        return false;
-               *(dest++) = hexchar(c >> 4);
-               *(dest++) = hexchar(c & 0xF);
+               *(dest++) = HEX_CHARS[(c >> 4) & 0xF];
+               *(dest++) = HEX_CHARS[c & 0xF];
                used++;
                destsize -= 2;
        }