From d294e162247fb7a5a2fc8565d54b42caea139122 Mon Sep 17 00:00:00 2001 From: chakrabot Date: Thu, 27 Jul 2017 03:02:20 -0700 Subject: [PATCH] [Merge Microsoft/Chakracore@55a0eb1825] [MERGE #3432 @MSLaguana] Fixing debug assert failure in WriteStringCopy Merge pull request #3432 from MSLaguana:fixStringCopyErrorChecking The WriteStringCopy function was accessing string pointers without setting up error handling correctly, triggering asserts in debug builds. --- deps/chakrashim/core/lib/Jsrt/Jsrt.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/deps/chakrashim/core/lib/Jsrt/Jsrt.cpp b/deps/chakrashim/core/lib/Jsrt/Jsrt.cpp index 05712eb0106..eb705a0f472 100644 --- a/deps/chakrashim/core/lib/Jsrt/Jsrt.cpp +++ b/deps/chakrashim/core/lib/Jsrt/Jsrt.cpp @@ -4194,15 +4194,14 @@ JsErrorCode WriteStringCopy( *written = 0; // init to 0 for default } - if (!Js::JavascriptString::Is(value)) + const char16* str = nullptr; + size_t strLength = 0; + JsErrorCode errorCode = JsStringToPointer(value, &str, &strLength); + if (errorCode != JsNoError) { - return JsErrorInvalidArgument; + return errorCode; } - Js::JavascriptString *jsString = Js::JavascriptString::FromVar(value); - const char16* str = jsString->GetSz(); - size_t strLength = jsString->GetLength(); - if (start < 0 || (size_t)start > strLength) { return JsErrorInvalidArgument; // start out of range, no chars written @@ -4214,7 +4213,7 @@ JsErrorCode WriteStringCopy( return JsNoError; // no chars written } - JsErrorCode errorCode = copyFunc(str + start, count, written); + errorCode = copyFunc(str + start, count, written); if (errorCode != JsNoError) { return errorCode;