proc/readproc.c: Fix the unhex() function.
This function is unused (SIGNAL_STRING is defined by default, and if it is not, procps does not compile -- for example, there is no "outbuf" in help_pr_sig()) but fix it anyway. There are two bugs: - it accepts non-hexadecimal characters (anything >= 0x30); - "(c - (c>0x57) ? 0x57 : 0x30)" is always equal to 0x57.
This commit is contained in:
parent
920b0ada70
commit
27e45cf43b
@ -78,8 +78,10 @@ static unsigned long long unhex(const char *restrict cp){
|
||||
unsigned long long ull = 0;
|
||||
for(;;){
|
||||
char c = *cp++;
|
||||
if(unlikely(c<0x30)) break;
|
||||
ull = (ull<<4) | (c - (c>0x57) ? 0x57 : 0x30) ;
|
||||
if(!( (c >= '0' && c <= '9') ||
|
||||
(c >= 'A' && c <= 'F') ||
|
||||
(c >= 'a' && c <= 'f') )) break;
|
||||
ull = (ull<<4) | (c - (c >= 'a' ? 'a'-10 : c >= 'A' ? 'A'-10 : '0'));
|
||||
}
|
||||
return ull;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user