diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2007-05-30 10:32:19 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-05-30 15:01:37 -0700 |
commit | 192a6be2a77ab3bf446237fdf6575b0aca863d9e (patch) | |
tree | 8ee58b598b0abffe78dcf16385320c53b74f4f52 | |
parent | 7faf068660f0a060066ccbc80f7debbba6bc2d76 (diff) | |
download | git-192a6be2a77ab3bf446237fdf6575b0aca863d9e.tar.gz |
fix signed range problems with hex conversions
Make hexval_table[] "const". Also make sure that the accessor
function hexval() does not access the table with out-of-range
values by declaring its parameter "unsigned char", instead of
"unsigned int".
With this, gcc can just generate:
movzbl (%rdi), %eax
movsbl hexval_table(%rax),%edx
movzbl 1(%rdi), %eax
movsbl hexval_table(%rax),%eax
sall $4, %edx
orl %eax, %edx
for the code to generate a byte from two hex characters.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | cache.h | 4 | ||||
-rw-r--r-- | sha1_file.c | 2 |
2 files changed, 3 insertions, 3 deletions
@@ -302,8 +302,8 @@ extern int legacy_loose_object(unsigned char *); extern int has_pack_file(const unsigned char *sha1); extern int has_pack_index(const unsigned char *sha1); -extern signed char hexval_table[256]; -static inline unsigned int hexval(unsigned int c) +extern const signed char hexval_table[256]; +static inline unsigned int hexval(unsigned char c) { return hexval_table[c]; } diff --git a/sha1_file.c b/sha1_file.c index 523417027a..ae9bd1fc2f 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -32,7 +32,7 @@ const unsigned char null_sha1[20]; static unsigned int sha1_file_open_flag = O_NOATIME; -signed char hexval_table[256] = { +const signed char hexval_table[256] = { -1, -1, -1, -1, -1, -1, -1, -1, /* 00-07 */ -1, -1, -1, -1, -1, -1, -1, -1, /* 08-0f */ -1, -1, -1, -1, -1, -1, -1, -1, /* 10-17 */ |