From 2eda2d609658826c559fca1944b0e6aafb9d1344 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 3 Mar 2015 14:46:16 +0100 Subject: 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: https://github.com/iojs/io.js/pull/1042 Reviewed-By: Trevor Norris --- src/string_bytes.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/string_bytes.cc') diff --git a/src/string_bytes.cc b/src/string_bytes.cc index 4a91f25048..1f5e592a32 100644 --- a/src/string_bytes.cc +++ b/src/string_bytes.cc @@ -263,7 +263,7 @@ bool StringBytes::GetExternalParts(Isolate* isolate, const String::ExternalStringResource* ext; ext = str->GetExternalStringResource(); *data = reinterpret_cast(ext->data()); - *len = ext->length(); + *len = ext->length() * sizeof(*ext->data()); return true; } @@ -317,7 +317,7 @@ size_t StringBytes::Write(Isolate* isolate, case UCS2: if (is_extern) - memcpy(buf, data, len * 2); + memcpy(buf, data, len); else len = str->Write(reinterpret_cast(buf), 0, buflen, flags); if (IsBigEndian()) { -- cgit v1.2.3