diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2007-05-30 19:32:19 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-05-31 00:01:37 +0200 |
commit | 192a6be2a77ab3bf446237fdf6575b0aca863d9e (patch) | |
tree | 8ee58b598b0abffe78dcf16385320c53b74f4f52 | |
parent | git-svn: avoid md5 calculation entirely if SVN doesn't provide one (diff) | |
download | git-192a6be2a77ab3bf446237fdf6575b0aca863d9e.tar.xz git-192a6be2a77ab3bf446237fdf6575b0aca863d9e.zip |
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 */ |