Use append_utf8_character_unsafe in json_string_decode.
This commit is contained in:
parent
7887bbdb35
commit
7532774bf0
@ -9,8 +9,7 @@
|
|||||||
#include "td/utils/misc.h"
|
#include "td/utils/misc.h"
|
||||||
#include "td/utils/ScopeGuard.h"
|
#include "td/utils/ScopeGuard.h"
|
||||||
#include "td/utils/SliceBuilder.h"
|
#include "td/utils/SliceBuilder.h"
|
||||||
|
#include "td/utils/utf8.h"
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
@ -185,7 +184,7 @@ Result<MutableSlice> json_string_decode(Parser &parser) {
|
|||||||
if (cur_src + 4 > end) {
|
if (cur_src + 4 > end) {
|
||||||
return Status::Error("\\u has less than 4 symbols");
|
return Status::Error("\\u has less than 4 symbols");
|
||||||
}
|
}
|
||||||
int num = 0;
|
uint32 num = 0;
|
||||||
for (int i = 0; i < 4; i++, cur_src++) {
|
for (int i = 0; i < 4; i++, cur_src++) {
|
||||||
int d = hex_to_int(*cur_src);
|
int d = hex_to_int(*cur_src);
|
||||||
if (d == 16) {
|
if (d == 16) {
|
||||||
@ -212,21 +211,7 @@ Result<MutableSlice> json_string_decode(Parser &parser) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num < 128) {
|
cur_dest = append_utf8_character_unsafe(cur_dest, num);
|
||||||
*cur_dest++ = static_cast<char>(num);
|
|
||||||
} else if (num < 0x800) {
|
|
||||||
*cur_dest++ = static_cast<char>(0xc0 + (num >> 6));
|
|
||||||
*cur_dest++ = static_cast<char>(0x80 + (num & 63));
|
|
||||||
} else if (num <= 0xffff) {
|
|
||||||
*cur_dest++ = static_cast<char>(0xe0 + (num >> 12));
|
|
||||||
*cur_dest++ = static_cast<char>(0x80 + ((num >> 6) & 63));
|
|
||||||
*cur_dest++ = static_cast<char>(0x80 + (num & 63));
|
|
||||||
} else {
|
|
||||||
*cur_dest++ = static_cast<char>(0xf0 + (num >> 18));
|
|
||||||
*cur_dest++ = static_cast<char>(0x80 + ((num >> 12) & 63));
|
|
||||||
*cur_dest++ = static_cast<char>(0x80 + ((num >> 6) & 63));
|
|
||||||
*cur_dest++ = static_cast<char>(0x80 + (num & 63));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -337,7 +322,7 @@ Result<JsonValue> do_json_decode(Parser &parser, int32 max_depth) {
|
|||||||
case '[': {
|
case '[': {
|
||||||
parser.skip('[');
|
parser.skip('[');
|
||||||
parser.skip_whitespaces();
|
parser.skip_whitespaces();
|
||||||
std::vector<JsonValue> res;
|
vector<JsonValue> res;
|
||||||
if (parser.try_skip(']')) {
|
if (parser.try_skip(']')) {
|
||||||
return JsonValue::create_array(std::move(res));
|
return JsonValue::create_array(std::move(res));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user