jsc CLI tool crashes on EOF.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Dec 2015 02:17:03 +0000 (02:17 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Dec 2015 02:17:03 +0000 (02:17 +0000)
<https://webkit.org/b/152522>

Reviewed by Benjamin Poulain.

SourceProvider should treat String() like the empty string for hashing purposes.
This was a subtle behavior change in r194017 due to how zero-length strings are
treated by StringImpl::createSubstringSharingImpl().

I made these SourceProviders store a Ref<StringImpl> internally instead of a
String, to codify the fact that these strings can't be null strings.

I couldn't find a way to cause this crash through the API.

* API/JSScriptRef.cpp:
(OpaqueJSScript::OpaqueJSScript):
* parser/SourceProvider.h:
(JSC::StringSourceProvider::StringSourceProvider):

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

Source/JavaScriptCore/API/JSScriptRef.cpp
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/parser/SourceProvider.h

index e6504c7..60bde60 100644 (file)
@@ -48,12 +48,12 @@ public:
 
     unsigned hash() const override
     {
-        return m_source.impl()->hash();
+        return m_source.get().hash();
     }
 
     StringView source() const override
     {
-        return m_source;
+        return m_source.get();
     }
 
     VM* vm() const { return m_vm; }
@@ -62,14 +62,14 @@ private:
     OpaqueJSScript(VM* vm, const String& url, int startingLineNumber, const String& source)
         : SourceProvider(url, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber::first()))
         , m_vm(vm)
-        , m_source(source)
+        , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
     {
     }
 
     virtual ~OpaqueJSScript() { }
 
     VM* m_vm;
-    String m_source;
+    Ref<StringImpl> m_source;
 };
 
 static bool parseScript(VM* vm, const SourceCode& source, ParserError& error)
index 51cf36d..df006db 100644 (file)
@@ -1,3 +1,24 @@
+2015-12-23  Andreas Kling  <akling@apple.com>
+
+        jsc CLI tool crashes on EOF.
+        <https://webkit.org/b/152522>
+
+        Reviewed by Benjamin Poulain.
+
+        SourceProvider should treat String() like the empty string for hashing purposes.
+        This was a subtle behavior change in r194017 due to how zero-length strings are
+        treated by StringImpl::createSubstringSharingImpl().
+
+        I made these SourceProviders store a Ref<StringImpl> internally instead of a
+        String, to codify the fact that these strings can't be null strings.
+
+        I couldn't find a way to cause this crash through the API.
+
+        * API/JSScriptRef.cpp:
+        (OpaqueJSScript::OpaqueJSScript):
+        * parser/SourceProvider.h:
+        (JSC::StringSourceProvider::StringSourceProvider):
+
 2015-12-23  Filip Pizlo  <fpizlo@apple.com>
 
         FTL B3 should be able to run crypto-sha1 in eager mode
index 6b478f7..f47a905 100644 (file)
@@ -90,22 +90,22 @@ namespace JSC {
         
         unsigned hash() const override
         {
-            return m_source.impl()->hash();
+            return m_source.get().hash();
         }
 
         virtual StringView source() const override
         {
-            return m_source;
+            return m_source.get();
         }
 
     private:
         StringSourceProvider(const String& source, const String& url, const TextPosition& startPosition)
             : SourceProvider(url, startPosition)
-            , m_source(source)
+            , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
         {
         }
 
-        String m_source;
+        Ref<StringImpl> m_source;
     };
     
 #if ENABLE(WEBASSEMBLY)