From d23309733a5b2a9e1adc304ee50c5a5ed7a087c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Sat, 3 Sep 2016 17:59:20 +0200 Subject: introduce hex2chr() for converting two hexadecimal digits to a character Add and use a helper function that decodes the char value of two hexadecimal digits. It returns a negative number on error, avoids running over the end of the given string and doesn't shift negative values. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- hex.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'hex.c') diff --git a/hex.c b/hex.c index 0519f853b2..60541c9d4b 100644 --- a/hex.c +++ b/hex.c @@ -39,16 +39,8 @@ int get_sha1_hex(const char *hex, unsigned char *sha1) { int i; for (i = 0; i < GIT_SHA1_RAWSZ; i++) { - unsigned int val; - /* - * hex[1]=='\0' is caught when val is checked below, - * but if hex[0] is NUL we have to avoid reading - * past the end of the string: - */ - if (!hex[0]) - return -1; - val = (hexval(hex[0]) << 4) | hexval(hex[1]); - if (val & ~0xff) + int val = hex2chr(hex); + if (val < 0) return -1; *sha1++ = val; hex += 2; -- cgit v1.2.3