summaryrefslogtreecommitdiff
path: root/hex.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2016-09-03 15:59:20 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-09-07 17:42:46 (GMT)
commitd23309733a5b2a9e1adc304ee50c5a5ed7a087c2 (patch)
treec1555e8fce5bdf708b48fb43391c98002dcd3716 /hex.c
parente0c1ceafc5bece92d35773a75fff59497e1d9bd5 (diff)
downloadgit-d23309733a5b2a9e1adc304ee50c5a5ed7a087c2.zip
git-d23309733a5b2a9e1adc304ee50c5a5ed7a087c2.tar.gz
git-d23309733a5b2a9e1adc304ee50c5a5ed7a087c2.tar.bz2
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 <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'hex.c')
-rw-r--r--hex.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/hex.c b/hex.c
index 0519f85..60541c9 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;