| Index: runtime/vm/json_stream.cc
|
| diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
|
| index 4851875703cd3b4c12c6e552b63d2a039c1169fc..4d2f27bea542c4c3ee6ef2dfabb4c5e83be3ce95 100644
|
| --- a/runtime/vm/json_stream.cc
|
| +++ b/runtime/vm/json_stream.cc
|
| @@ -396,10 +396,12 @@ void JSONStream::PrintValue(const char* s) {
|
| }
|
|
|
|
|
| -bool JSONStream::PrintValueStr(const String& s, intptr_t limit) {
|
| +bool JSONStream::PrintValueStr(const String& s,
|
| + intptr_t offset,
|
| + intptr_t count) {
|
| PrintCommaIfNeeded();
|
| buffer_.AddChar('"');
|
| - bool did_truncate = AddDartString(s, limit);
|
| + bool did_truncate = AddDartString(s, offset, count);
|
| buffer_.AddChar('"');
|
| return did_truncate;
|
| }
|
| @@ -534,9 +536,10 @@ void JSONStream::PrintPropertyBase64(const char* name,
|
|
|
| bool JSONStream::PrintPropertyStr(const char* name,
|
| const String& s,
|
| - intptr_t limit) {
|
| + intptr_t offset,
|
| + intptr_t count) {
|
| PrintPropertyName(name);
|
| - return PrintValueStr(s, limit);
|
| + return PrintValueStr(s, offset, count);
|
| }
|
|
|
|
|
| @@ -702,23 +705,24 @@ void JSONStream::AddEscapedUTF8String(const char* s, intptr_t len) {
|
| }
|
|
|
|
|
| -bool JSONStream::AddDartString(const String& s, intptr_t limit) {
|
| - bool did_truncate = false;
|
| +bool JSONStream::AddDartString(const String& s,
|
| + intptr_t offset,
|
| + intptr_t count) {
|
| intptr_t length = s.Length();
|
| - if (limit == -1) {
|
| - limit = length;
|
| + ASSERT(offset >= 0);
|
| + if (offset > length) {
|
| + offset = length;
|
| }
|
| - if (length <= limit) {
|
| - limit = length;
|
| - } else {
|
| - did_truncate = true;
|
| + if (!Utils::RangeCheck(offset, count, length)) {
|
| + count = length - offset;
|
| }
|
| -
|
| - for (intptr_t i = 0; i < limit; i++) {
|
| + intptr_t limit = offset + count;
|
| + for (intptr_t i = offset; i < limit; i++) {
|
| intptr_t code_unit = s.CharAt(i);
|
| buffer_.EscapeAndAddCodeUnit(code_unit);
|
| }
|
| - return did_truncate;
|
| + // Return value indicates whether the string is truncated.
|
| + return (offset > 0) || (limit < length);
|
| }
|
|
|
|
|
|
|