Skip to content

Commit 2eda2d6

Browse files
committed
src: fix external string length calculation
Make StringBytes::GetExternalParts() return the byte length for two-byte strings, not the character length. Its callers operate on bytes, not characters. This also fixes StringBytes::Size() reporting only half of the actual number of bytes for external two-byte strings. PR-URL: #1042 Reviewed-By: Trevor Norris <[email protected]>
1 parent e2fb733 commit 2eda2d6

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/string_bytes.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ bool StringBytes::GetExternalParts(Isolate* isolate,
263263
const String::ExternalStringResource* ext;
264264
ext = str->GetExternalStringResource();
265265
*data = reinterpret_cast<const char*>(ext->data());
266-
*len = ext->length();
266+
*len = ext->length() * sizeof(*ext->data());
267267
return true;
268268
}
269269

@@ -317,7 +317,7 @@ size_t StringBytes::Write(Isolate* isolate,
317317

318318
case UCS2:
319319
if (is_extern)
320-
memcpy(buf, data, len * 2);
320+
memcpy(buf, data, len);
321321
else
322322
len = str->Write(reinterpret_cast<uint16_t*>(buf), 0, buflen, flags);
323323
if (IsBigEndian()) {

0 commit comments

Comments
 (0)