...
|
...
|
@@ -907,12 +907,14 @@ char *cli_unescape(const char *str)
|
907
|
907
|
if(k+5 >= len || str[k+1] != 'u' || !isxdigit(str[k+2]) || !isxdigit(str[k+3])
|
908
|
908
|
|| !isxdigit(str[k+4]) || !isxdigit(str[k+5])) {
|
909
|
909
|
if(k+2 < len && isxdigit(str[k+1]) && isxdigit(str[k+2])) {
|
910
|
|
- c = (cli_hex2int(str[k+1])<<4) | cli_hex2int(str[k+2]);
|
|
910
|
+ c = ((cli_hex2int(str[k + 1]) < 0 ? 0 : cli_hex2int(str[k + 1])) << 4) | cli_hex2int(str[k + 2]);
|
911
|
911
|
k += 2;
|
912
|
912
|
}
|
913
|
913
|
} else {
|
914
|
|
- uint16_t u = (cli_hex2int(str[k+2])<<12) | (cli_hex2int(str[k+3])<<8) |
|
915
|
|
- (cli_hex2int(str[k+4])<<4) | cli_hex2int(str[k+5]);
|
|
914
|
+ uint16_t u = ((cli_hex2int(str[k + 2]) < 0 ? 0 : cli_hex2int(str[k + 2])) << 12) |
|
|
915
|
+ ((cli_hex2int(str[k + 3]) < 0 ? 0 : cli_hex2int(str[k + 3])) << 8) |
|
|
916
|
+ ((cli_hex2int(str[k + 4]) < 0 ? 0 : cli_hex2int(str[k + 4])) << 4) |
|
|
917
|
+ cli_hex2int(str[k + 5]);
|
916
|
918
|
i += output_utf8(u, (unsigned char*)&R[i]);
|
917
|
919
|
k += 5;
|
918
|
920
|
continue;
|
...
|
...
|
@@ -958,13 +960,15 @@ int cli_textbuffer_append_normalize(struct text_buffer *buf, const char *str, si
|
958
|
958
|
break;
|
959
|
959
|
case 'x':
|
960
|
960
|
if(i+2 < len)
|
961
|
|
- c = (cli_hex2int(str[i+1])<<4)|cli_hex2int(str[i+2]);
|
|
961
|
+ c = ((cli_hex2int(str[i + 1]) < 0 ? 0 : cli_hex2int(str[i + 1])) << 4) | cli_hex2int(str[i + 2]);
|
962
|
962
|
i += 2;
|
963
|
963
|
break;
|
964
|
964
|
case 'u':
|
965
|
965
|
if(i+4 < len) {
|
966
|
|
- uint16_t u = (cli_hex2int(str[i+1])<<12) | (cli_hex2int(str[i+2])<<8) |
|
967
|
|
- (cli_hex2int(str[i+3])<<4) | cli_hex2int(str[i+4]);
|
|
966
|
+ uint16_t u = ((cli_hex2int(str[i + 1]) < 0 ? 0 : cli_hex2int(str[i + 1])) << 12) |
|
|
967
|
+ ((cli_hex2int(str[i + 2]) < 0 ? 0 : cli_hex2int(str[i + 2])) << 8) |
|
|
968
|
+ ((cli_hex2int(str[i + 3]) < 0 ? 0 : cli_hex2int(str[i + 3])) << 4) |
|
|
969
|
+ cli_hex2int(str[i + 4]);
|
968
|
970
|
if(textbuffer_ensure_capacity(buf, 4) == -1)
|
969
|
971
|
return -1;
|
970
|
972
|
buf->pos += output_utf8(u, (unsigned char*)&buf->data[buf->pos]);
|