Bug 1869726 - Part 4: Use latin1 JSExternalString for WebIDL UTF8String with ASCII case. r=emilio

Differential Revision: https://phabricator.services.mozilla.com/D198062
This commit is contained in:
Tooru Fujisawa 2024-01-13 08:01:43 +00:00
parent ffe3c178f0
commit d55b0392db
2 changed files with 6 additions and 7 deletions

View File

@ -120,6 +120,11 @@ template <typename T, typename std::enable_if_t<std::is_same<
inline bool AssignJSString(JSContext* cx, T& dest, JSString* s) { inline bool AssignJSString(JSContext* cx, T& dest, JSString* s) {
using namespace mozilla; using namespace mozilla;
CheckedInt<size_t> bufLen(JS::GetStringLength(s)); CheckedInt<size_t> bufLen(JS::GetStringLength(s));
if (XPCStringConvert::MaybeAssignUTF8StringChars(s, bufLen.value(), dest)) {
return true;
}
// From the contract for JS_EncodeStringToUTF8BufferPartial, to guarantee that // From the contract for JS_EncodeStringToUTF8BufferPartial, to guarantee that
// the whole string is converted. // the whole string is converted.
if (JS::StringHasLatin1Chars(s)) { if (JS::StringHasLatin1Chars(s)) {

View File

@ -2575,13 +2575,7 @@ inline bool ByteStringToJsval(JSContext* cx, const nsACString& str,
// TODO(bug 1606957): This could probably be better. // TODO(bug 1606957): This could probably be better.
inline bool NonVoidUTF8StringToJsval(JSContext* cx, const nsACString& str, inline bool NonVoidUTF8StringToJsval(JSContext* cx, const nsACString& str,
JS::MutableHandle<JS::Value> rval) { JS::MutableHandle<JS::Value> rval) {
JSString* jsStr = return xpc::NonVoidUTF8StringToJsval(cx, str, rval);
JS_NewStringCopyUTF8N(cx, {str.BeginReading(), str.Length()});
if (!jsStr) {
return false;
}
rval.setString(jsStr);
return true;
} }
inline bool UTF8StringToJsval(JSContext* cx, const nsACString& str, inline bool UTF8StringToJsval(JSContext* cx, const nsACString& str,