Should only shift when scan_hex succeed

pull/69/head
William Wong 8 years ago
parent f12cf1599c
commit 8ef9b57989
  1. 20
      parson.c

@ -501,18 +501,22 @@ static int scan_hex(const char c) {
} }
static int scan_utf_16(const char *str, unsigned int *cp) { static int scan_utf_16(const char *str, unsigned int *cp) {
unsigned int cp1 = scan_hex(*str++) << 12; int i = 4;
unsigned int cp2 = scan_hex(*str++) << 8; int intermediate;
unsigned int cp3 = scan_hex(*str++) << 4;
unsigned int cp4 = scan_hex(*str);
if (cp1 == EOF || cp2 == EOF || cp3 == EOF || cp4 == EOF) { *cp = 0;
while (i--) {
intermediate = scan_hex(*str++);
if (intermediate == EOF) {
return EOF; return EOF;
} else { }
*cp = cp1 | cp2 | cp3 | cp4;
return 1; *cp |= intermediate << (i << 2);
} }
return 1;
} }
static int parse_utf_16(const char **unprocessed, char **processed) { static int parse_utf_16(const char **unprocessed, char **processed) {

Loading…
Cancel
Save