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>
This commit is contained in:
parent
7faf068660
commit
192a6be2a7
4
cache.h
4
cache.h
@ -302,8 +302,8 @@ extern int legacy_loose_object(unsigned char *);
|
|||||||
extern int has_pack_file(const unsigned char *sha1);
|
extern int has_pack_file(const unsigned char *sha1);
|
||||||
extern int has_pack_index(const unsigned char *sha1);
|
extern int has_pack_index(const unsigned char *sha1);
|
||||||
|
|
||||||
extern signed char hexval_table[256];
|
extern const signed char hexval_table[256];
|
||||||
static inline unsigned int hexval(unsigned int c)
|
static inline unsigned int hexval(unsigned char c)
|
||||||
{
|
{
|
||||||
return hexval_table[c];
|
return hexval_table[c];
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ const unsigned char null_sha1[20];
|
|||||||
|
|
||||||
static unsigned int sha1_file_open_flag = O_NOATIME;
|
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, /* 00-07 */
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 08-0f */
|
-1, -1, -1, -1, -1, -1, -1, -1, /* 08-0f */
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 10-17 */
|
-1, -1, -1, -1, -1, -1, -1, -1, /* 10-17 */
|
||||||
|
Loading…
Reference in New Issue
Block a user