aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/cache.c')
-rw-r--r--net/sunrpc/cache.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index 2a840519405..ac2c6e6abe6 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -1179,13 +1179,19 @@ int qword_get(char **bpp, char *dest, int bufsize)
1179 if (bp[0] == '\\' && bp[1] == 'x') { 1179 if (bp[0] == '\\' && bp[1] == 'x') {
1180 /* HEX STRING */ 1180 /* HEX STRING */
1181 bp += 2; 1181 bp += 2;
1182 while (isxdigit(bp[0]) && isxdigit(bp[1]) && len < bufsize) { 1182 while (len < bufsize) {
1183 int byte = isdigit(*bp) ? *bp-'0' : toupper(*bp)-'A'+10; 1183 int h, l;
1184 bp++; 1184
1185 byte <<= 4; 1185 h = hex_to_bin(bp[0]);
1186 byte |= isdigit(*bp) ? *bp-'0' : toupper(*bp)-'A'+10; 1186 if (h < 0)
1187 *dest++ = byte; 1187 break;
1188 bp++; 1188
1189 l = hex_to_bin(bp[1]);
1190 if (l < 0)
1191 break;
1192
1193 *dest++ = (h << 4) | l;
1194 bp += 2;
1189 len++; 1195 len++;
1190 } 1196 }
1191 } else { 1197 } else {