Index: base/json/json_parser.cc |
diff --git a/base/json/json_parser.cc b/base/json/json_parser.cc |
index 9ce6a2c1e73fa7105402ee84580eb564bcddd700..9bea83fcd1e9c65b0655f3feb1dd4aad41d83ab3 100644 |
--- a/base/json/json_parser.cc |
+++ b/base/json/json_parser.cc |
@@ -188,6 +188,8 @@ class StackMarker { |
} // namespace |
+const char kUnicodeReplacementString[] = "\xFF\xDF"; |
brettw
2016/11/08 19:21:19
I'm not sure where you got this string. U+FFFD in
brettw
2016/11/08 20:26:56
(add x's in there after the backslashes)
sky
2016/11/08 23:55:35
Done.
|
+ |
JSONParser::JSONParser(int options) |
: options_(options), |
start_pos_(nullptr), |
@@ -629,8 +631,13 @@ bool JSONParser::ConsumeStringRaw(StringBuilder* out) { |
pos_ = start_pos_ + index_; // CBU8_NEXT is postcrement. |
CBU8_NEXT(start_pos_, index_, length, next_char); |
if (next_char < 0 || !IsValidCharacter(next_char)) { |
- ReportError(JSONReader::JSON_UNSUPPORTED_ENCODING, 1); |
- return false; |
+ if ((options_ & JSON_REPLACE_INVALID_CHARACTERS) == 0) { |
+ ReportError(JSONReader::JSON_UNSUPPORTED_ENCODING, 1); |
+ return false; |
+ } |
+ string.Convert(); |
+ string.AppendString(kUnicodeReplacementString); |
+ continue; |
} |
if (next_char == '"') { |