From d830295d21dc659a910db6eff22744f511338a2c Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Tue, 21 Sep 2010 09:40:25 +0300 Subject: [PATCH] --- yaml --- r: 217213 b: refs/heads/master c: e7f483eabea8ef6d2b5ce1b74c8184cc06819f15 h: refs/heads/master i: 217211: 2051a67e5f0669b6b181c6dacf0b39bb363f3170 v: v3 --- [refs] | 2 +- trunk/net/sunrpc/cache.c | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index a38216620c7b..b1a7b25c54f4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1117449276bb909b029ed0b9ba13f53e4784db9d +refs/heads/master: e7f483eabea8ef6d2b5ce1b74c8184cc06819f15 diff --git a/trunk/net/sunrpc/cache.c b/trunk/net/sunrpc/cache.c index 2a8405194056..ac2c6e6abe65 100644 --- a/trunk/net/sunrpc/cache.c +++ b/trunk/net/sunrpc/cache.c @@ -1179,13 +1179,19 @@ int qword_get(char **bpp, char *dest, int bufsize) if (bp[0] == '\\' && bp[1] == 'x') { /* HEX STRING */ bp += 2; - while (isxdigit(bp[0]) && isxdigit(bp[1]) && len < bufsize) { - int byte = isdigit(*bp) ? *bp-'0' : toupper(*bp)-'A'+10; - bp++; - byte <<= 4; - byte |= isdigit(*bp) ? *bp-'0' : toupper(*bp)-'A'+10; - *dest++ = byte; - bp++; + while (len < bufsize) { + int h, l; + + h = hex_to_bin(bp[0]); + if (h < 0) + break; + + l = hex_to_bin(bp[1]); + if (l < 0) + break; + + *dest++ = (h << 4) | l; + bp += 2; len++; } } else {