Source/JavaScriptCore/ChangeLog
authormsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 1 Mar 2017 22:28:23 +0000 (22:28 +0000)
committermsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 1 Mar 2017 22:28:23 +0000 (22:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=169055

Reviewed by Mark Lam.

Made local copies of options strings for OptionRange and string typed options.

* runtime/Options.cpp:
(JSC::parse):
(JSC::OptionRange::init):

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/Options.cpp

index 3cae33e..d7c7afd 100644 (file)
@@ -1,3 +1,16 @@
+2017-03-01  Michael Saboff  <msaboff@apple.com>
+
+        Source/JavaScriptCore/ChangeLog
+        https://bugs.webkit.org/show_bug.cgi?id=169055
+
+        Reviewed by Mark Lam.
+
+        Made local copies of options strings for OptionRange and string typed options.
+
+        * runtime/Options.cpp:
+        (JSC::parse):
+        (JSC::OptionRange::init):
+
 2017-03-01  Mark Lam  <mark.lam@apple.com>
 
         [Re-landing] Change JSLock to stash PlatformThread instead of std::thread::id.
index 5d01975..0e158c7 100644 (file)
@@ -101,9 +101,14 @@ static bool parse(const char* string, OptionRange& value)
 
 static bool parse(const char* string, const char*& value)
 {
-    if (!strlen(string))
-        string = nullptr;
-    value = string;
+    if (!strlen(string)) {
+        value = nullptr;
+        return true;
+    }
+
+    // FIXME <https://webkit.org/b/169057>: This could leak if this option is set more than once.
+    // Given that Options are typically used for testing, this isn't considered to be a problem.
+    value = WTF::fastStrDup(string);
     return true;
 }
 
@@ -222,14 +227,14 @@ bool OptionRange::init(const char* rangeString)
         return true;
     }
     
-    m_rangeString = rangeString;
+    const char* p = rangeString;
 
-    if (*rangeString == '!') {
+    if (*p == '!') {
         invert = true;
-        rangeString++;
+        p++;
     }
 
-    int scanResult = sscanf(rangeString, " %u:%u", &m_lowLimit, &m_highLimit);
+    int scanResult = sscanf(p, " %u:%u", &m_lowLimit, &m_highLimit);
 
     if (!scanResult || scanResult == EOF) {
         m_state = InitError;
@@ -244,6 +249,9 @@ bool OptionRange::init(const char* rangeString)
         return false;
     }
 
+    // FIXME <https://webkit.org/b/169057>: This could leak if this particular option is set more than once.
+    // Given that these options are used for testing, this isn't considered to be problem.
+    m_rangeString = WTF::fastStrDup(rangeString);
     m_state = invert ? Inverted : Normal;
 
     return true;