Explore increasing max JSString::m_length to UINT_MAX.
authorkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Aug 2017 17:27:46 +0000 (17:27 +0000)
committerkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Aug 2017 17:27:46 +0000 (17:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=163955
<rdar://problem/32001499>

Reviewed by JF Bastien.

This can cause us to release assert on some code paths. I don't
see a reason to maintain this restriction.

* runtime/JSString.h:
(JSC::JSString::length const):
(JSC::JSString::setLength):
(JSC::JSString::isValidLength): Deleted.
* runtime/JSStringBuilder.h:
(JSC::jsMakeNontrivialString):

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSString.h
Source/JavaScriptCore/runtime/JSStringBuilder.h

index 784637c..784b0a6 100644 (file)
@@ -1,3 +1,21 @@
+2017-08-25  Keith Miller  <keith_miller@apple.com>
+
+        Explore increasing max JSString::m_length to UINT_MAX.
+        https://bugs.webkit.org/show_bug.cgi?id=163955
+        <rdar://problem/32001499>
+
+        Reviewed by JF Bastien.
+
+        This can cause us to release assert on some code paths. I don't
+        see a reason to maintain this restriction.
+
+        * runtime/JSString.h:
+        (JSC::JSString::length const):
+        (JSC::JSString::setLength):
+        (JSC::JSString::isValidLength): Deleted.
+        * runtime/JSStringBuilder.h:
+        (JSC::jsMakeNontrivialString):
+
 2017-08-24  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r221119, r221124, and r221143.
index 3105705..ab54572 100644 (file)
@@ -164,14 +164,6 @@ public:
     const String& tryGetValue() const;
     const StringImpl* tryGetValueImpl() const;
     ALWAYS_INLINE unsigned length() const { return m_length; }
-    ALWAYS_INLINE static bool isValidLength(size_t length)
-    {
-        // While length is of type unsigned, the runtime and compilers are all
-        // expecting that m_length is a positive value <= INT_MAX.
-        // FIXME: Look into making the max length UINT_MAX to match StringImpl's max length.
-        // https://bugs.webkit.org/show_bug.cgi?id=163955
-        return length <= std::numeric_limits<int32_t>::max();
-    }
 
     JSValue toPrimitive(ExecState*, PreferredPrimitiveType) const;
     bool toBoolean() const { return !!length(); }
@@ -219,7 +211,6 @@ protected:
 
     ALWAYS_INLINE void setLength(unsigned length)
     {
-        RELEASE_ASSERT(isValidLength(length));
         m_length = length;
     }
 
index 88ad6dd..9b4294a 100644 (file)
@@ -131,7 +131,7 @@ inline JSValue jsMakeNontrivialString(ExecState* exec, const StringType& string,
     VM& vm = exec->vm();
     auto scope = DECLARE_THROW_SCOPE(vm);
     String result = tryMakeString(string, strings...);
-    if (UNLIKELY(!result || !JSString::isValidLength(result.length())))
+    if (UNLIKELY(!result))
         return throwOutOfMemoryError(exec, scope);
     return jsNontrivialString(exec, WTFMove(result));
 }