Replace sscanf() with strtol() in hex2bin()

This commit is contained in:
pooler 2013-06-09 16:06:46 +02:00
parent c4a5f64019
commit f80163ec4c

17
util.c
View file

@ -458,26 +458,23 @@ char *bin2hex(const unsigned char *p, size_t len)
bool hex2bin(unsigned char *p, const char *hexstr, size_t len) bool hex2bin(unsigned char *p, const char *hexstr, size_t len)
{ {
while (*hexstr && len) {
char hex_byte[3]; char hex_byte[3];
unsigned int v; char *ep;
hex_byte[2] = '\0';
while (*hexstr && len) {
if (!hexstr[1]) { if (!hexstr[1]) {
applog(LOG_ERR, "hex2bin str truncated"); applog(LOG_ERR, "hex2bin str truncated");
return false; return false;
} }
hex_byte[0] = hexstr[0]; hex_byte[0] = hexstr[0];
hex_byte[1] = hexstr[1]; hex_byte[1] = hexstr[1];
hex_byte[2] = 0; *p = (unsigned char) strtol(hex_byte, &ep, 16);
if (*ep) {
if (sscanf(hex_byte, "%x", &v) != 1) { applog(LOG_ERR, "hex2bin failed on '%s'", hex_byte);
applog(LOG_ERR, "hex2bin sscanf '%s' failed", hex_byte);
return false; return false;
} }
*p = (unsigned char) v;
p++; p++;
hexstr += 2; hexstr += 2;
len--; len--;