From 596b90cea8b86b06138c5578d86bc8ef989acfb0 Mon Sep 17 00:00:00 2001 From: Ted Campbell Date: Fri, 24 Feb 2023 15:58:35 +0000 Subject: [PATCH] Bug 1817767 - Use CopyChars for rope atomization cache. r=jandem Differential Revision: https://phabricator.services.mozilla.com/D170793 --- js/src/vm/JSAtom.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/js/src/vm/JSAtom.cpp b/js/src/vm/JSAtom.cpp index 9c0025aff84c..6e4a2e080a06 100644 --- a/js/src/vm/JSAtom.cpp +++ b/js/src/vm/JSAtom.cpp @@ -744,18 +744,15 @@ JSAtom* js::AtomizeString(JSContext* cx, JSString* str) { JS::Latin1Char flattenRope[StringToAtomCache::MinStringLength]; mozilla::Maybe key; size_t length = str->length(); - if (!str->isLinear() && length < StringToAtomCache::MinStringLength && + if (str->isRope() && length < StringToAtomCache::MinStringLength && str->hasLatin1Chars()) { StringSegmentRange iter(cx); if (iter.init(str)) { - JS::AutoCheckCannotGC nogc; size_t index = 0; do { const JSLinearString* s = iter.front(); - size_t len = s->length(); - const JS::Latin1Char* latinChars = s->latin1Chars(nogc); - memcpy(flattenRope + index, latinChars, len); - index += len; + CopyChars(flattenRope + index, *s); + index += s->length(); } while (iter.popFront() && !iter.empty()); if (JSAtom* atom = cx->caches().stringToAtomCache.lookupWithRopeChars(