[JSC] Make StaticStringImpl & StaticSymbolImpl actually static
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Mar 2019 22:37:43 +0000 (22:37 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Mar 2019 22:37:43 +0000 (22:37 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194212

Reviewed by Mark Lam.

Avoid mutation onto refcounts if `isStatic()` returns true so that the content of StaticStringImpl never gets modified.

* wtf/text/StringImpl.h:
(WTF::StringImpl::ref):
(WTF::StringImpl::deref):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242747 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/text/StringImpl.h

index 6466cba..1685b79 100644 (file)
@@ -1,3 +1,16 @@
+2019-03-11  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [JSC] Make StaticStringImpl & StaticSymbolImpl actually static
+        https://bugs.webkit.org/show_bug.cgi?id=194212
+
+        Reviewed by Mark Lam.
+
+        Avoid mutation onto refcounts if `isStatic()` returns true so that the content of StaticStringImpl never gets modified.
+
+        * wtf/text/StringImpl.h:
+        (WTF::StringImpl::ref):
+        (WTF::StringImpl::deref):
+
 2019-03-11  Sihui Liu  <sihui_liu@apple.com>
 
         Crash under WebCore::IDBDatabase::connectionToServerLost
index e564648..293e42d 100644 (file)
@@ -1064,6 +1064,8 @@ inline void StringImpl::ref()
 {
     STRING_STATS_REF_STRING(*this);
 
+    if (UNLIKELY(isStatic()))
+        return;
     m_refCount += s_refCountIncrement;
 }
 
@@ -1071,6 +1073,8 @@ inline void StringImpl::deref()
 {
     STRING_STATS_DEREF_STRING(*this);
 
+    if (UNLIKELY(isStatic()))
+        return;
     unsigned tempRefCount = m_refCount - s_refCountIncrement;
     if (!tempRefCount) {
         StringImpl::destroy(this);