diff --git a/dom/plugins/base/nsJSNPRuntime.cpp b/dom/plugins/base/nsJSNPRuntime.cpp index 6debf2bef339a5..0b62c3b828af10 100644 --- a/dom/plugins/base/nsJSNPRuntime.cpp +++ b/dom/plugins/base/nsJSNPRuntime.cpp @@ -15,6 +15,7 @@ #include "nsIScriptGlobalObject.h" #include "nsIScriptContext.h" #include "nsDOMJSUtils.h" +#include "nsJSUtils.h" #include "nsCxPusher.h" #include "nsIDocument.h" #include "nsIJSRuntimeService.h" @@ -405,13 +406,11 @@ JSValToNPVariant(NPP npp, JSContext *cx, JS::Value val, NPVariant *variant) } } else if (val.isString()) { JSString *jsstr = val.toString(); - size_t length; - const jschar *chars = ::JS_GetStringCharsZAndLength(cx, jsstr, &length); - if (!chars) { - return false; - } - nsDependentString str(chars, length); + nsAutoJSString str; + if (!str.init(cx, jsstr)) { + return false; + } uint32_t len; char *p = ToNewUTF8String(str, &len); diff --git a/js/ipc/JavaScriptShared.cpp b/js/ipc/JavaScriptShared.cpp index 9d5b3de2046323..b048d8e3e3673e 100644 --- a/js/ipc/JavaScriptShared.cpp +++ b/js/ipc/JavaScriptShared.cpp @@ -201,12 +201,7 @@ JavaScriptShared::convertIdToGeckoString(JSContext *cx, JS::HandleId id, nsStrin if (!str) return false; - const jschar *chars = JS_GetStringCharsZ(cx, str); - if (!chars) - return false; - - *to = chars; - return true; + return AssignJSString(cx, *to, str); } bool diff --git a/storage/src/mozStorageAsyncStatementParams.cpp b/storage/src/mozStorageAsyncStatementParams.cpp index 882f1d062b51d3..f88063dc8d3f73 100644 --- a/storage/src/mozStorageAsyncStatementParams.cpp +++ b/storage/src/mozStorageAsyncStatementParams.cpp @@ -7,6 +7,7 @@ #include "nsMemory.h" #include "nsString.h" #include "nsCOMPtr.h" +#include "nsJSUtils.h" #include "jsapi.h" @@ -65,9 +66,12 @@ AsyncStatementParams::SetProperty( } else if (JSID_IS_STRING(aId)) { JSString *str = JSID_TO_STRING(aId); - size_t length; - const jschar *chars = JS_GetInternedStringCharsAndLength(str, &length); - NS_ConvertUTF16toUTF8 name(chars, length); + nsAutoJSString autoStr; + if (!autoStr.init(aCtx, str)) { + return NS_ERROR_FAILURE; + } + + NS_ConvertUTF16toUTF8 name(autoStr); nsCOMPtr variant(convertJSValToVariant(aCtx, *_vp)); NS_ENSURE_TRUE(variant, NS_ERROR_UNEXPECTED); diff --git a/storage/src/mozStorageStatementParams.cpp b/storage/src/mozStorageStatementParams.cpp index d661733323aa96..3d1d2466acc528 100644 --- a/storage/src/mozStorageStatementParams.cpp +++ b/storage/src/mozStorageStatementParams.cpp @@ -4,6 +4,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "nsJSUtils.h" #include "nsMemory.h" #include "nsString.h" @@ -63,10 +64,12 @@ StatementParams::SetProperty(nsIXPConnectWrappedNative *aWrapper, } else if (JSID_IS_STRING(aId)) { JSString *str = JSID_TO_STRING(aId); - size_t length; - const jschar *chars = JS_GetStringCharsAndLength(aCtx, str, &length); - NS_ENSURE_TRUE(chars, NS_ERROR_UNEXPECTED); - NS_ConvertUTF16toUTF8 name(chars, length); + nsAutoJSString autoStr; + if (!autoStr.init(aCtx, str)) { + return NS_ERROR_FAILURE; + } + + NS_ConvertUTF16toUTF8 name(autoStr); // check to see if there's a parameter with this name nsCOMPtr variant(convertJSValToVariant(aCtx, *_vp)); @@ -182,13 +185,14 @@ StatementParams::NewResolve(nsIXPConnectWrappedNative *aWrapper, } else if (JSID_IS_STRING(id)) { JSString *str = JSID_TO_STRING(id); - size_t nameLength; - const jschar *nameChars = JS_GetStringCharsAndLength(aCtx, str, &nameLength); - NS_ENSURE_TRUE(nameChars, NS_ERROR_UNEXPECTED); + nsAutoJSString autoStr; + if (!autoStr.init(aCtx, str)) { + return NS_ERROR_FAILURE; + } // Check to see if there's a parameter with this name, and if not, let // the rest of the prototype chain be checked. - NS_ConvertUTF16toUTF8 name(nameChars, nameLength); + NS_ConvertUTF16toUTF8 name(autoStr); uint32_t idx; nsresult rv = mStatement->GetParameterIndex(name, &idx); if (NS_SUCCEEDED(rv)) { diff --git a/toolkit/components/places/History.cpp b/toolkit/components/places/History.cpp index d58936e3d36066..7fd88a94fa0475 100644 --- a/toolkit/components/places/History.cpp +++ b/toolkit/components/places/History.cpp @@ -31,6 +31,7 @@ #include "nsIXPConnect.h" #include "mozilla/unused.h" #include "nsContentUtils.h" // for nsAutoScriptBlocker +#include "nsJSUtils.h" #include "mozilla/ipc/URIUtils.h" #include "nsPrintfCString.h" #include "nsTHashtable.h" @@ -326,14 +327,10 @@ GetJSValueAsString(JSContext* aCtx, _string.Truncate(); return; } - size_t length; - const jschar* chars = - JS_GetStringCharsZAndLength(aCtx, aValue.toString(), &length); - if (!chars) { + + if (!AssignJSString(aCtx, _string, aValue.toString())) { _string.SetIsVoid(true); - return; } - _string.Assign(static_cast(chars), length); } /** diff --git a/widget/android/NativeJSContainer.cpp b/widget/android/NativeJSContainer.cpp index c41b81c2c2d5fd..1c4d7e13cb7743 100644 --- a/widget/android/NativeJSContainer.cpp +++ b/widget/android/NativeJSContainer.cpp @@ -7,6 +7,7 @@ #include "AndroidBridge.h" #include "mozilla/Vector.h" #include "prthread.h" +#include "nsJSUtils.h" using namespace mozilla; using namespace mozilla::widget; @@ -502,14 +503,11 @@ struct StringProperty static Type FromValue(JNIEnv* env, jobject instance, JSContext* cx, const JS::HandleString str) { - size_t strLen = 0; - const jschar* const strChars = - JS_GetStringCharsAndLength(cx, str, &strLen); - if (!CheckJSCall(env, !!strChars)) { + nsAutoJSString autoStr; + if (!CheckJSCall(env, autoStr.init(cx, str))) { return nullptr; } - jstring ret = env->NewString( - reinterpret_cast(strChars), strLen); + jstring ret = env->NewString(autoStr.BeginReading(), autoStr.Length()); MOZ_ASSERT(ret); return ret; }