Correctly close the variable argument list
authortpopela@redhat.com <tpopela@redhat.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Jul 2018 07:11:21 +0000 (07:11 +0000)
committertpopela@redhat.com <tpopela@redhat.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 25 Jul 2018 07:11:21 +0000 (07:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=186758

Reviewed by Michael Catanzaro.

The argcCopy is not ended when we early return. Also don't call
va_end() on args because it's closed in caller.

* wtf/text/WTFString.cpp:
(WTF::createWithFormatAndArguments):

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

Source/WTF/ChangeLog
Source/WTF/wtf/text/WTFString.cpp

index 365b9f2..52ada99 100644 (file)
@@ -1,3 +1,16 @@
+2018-07-25  Tomas Popela  <tpopela@redhat.com>
+
+        Correctly close the variable argument list
+        https://bugs.webkit.org/show_bug.cgi?id=186758
+
+        Reviewed by Michael Catanzaro.
+
+        The argcCopy is not ended when we early return. Also don't call
+        va_end() on args because it's closed in caller.
+
+        * wtf/text/WTFString.cpp:
+        (WTF::createWithFormatAndArguments):
+
 2018-07-24  Tim Horton  <timothy_horton@apple.com>
 
         HAVE(PARENTAL_CONTROLS) should be true on watchOS
index 9c5edd6..57bf1f8 100644 (file)
@@ -462,7 +462,7 @@ WTF_ATTRIBUTE_PRINTF(1, 0) static String createWithFormatAndArguments(const char
     if (strstr(format, "%@")) {
         auto cfFormat = adoptCF(CFStringCreateWithCString(kCFAllocatorDefault, format, kCFStringEncodingUTF8));
         auto result = adoptCF(CFStringCreateWithFormatAndArguments(kCFAllocatorDefault, nullptr, cfFormat.get(), args));
-        va_end(args);
+        va_end(argsCopy);
         return result.get();
     }
 #endif
@@ -474,12 +474,15 @@ WTF_ATTRIBUTE_PRINTF(1, 0) static String createWithFormatAndArguments(const char
     char ch;
     int result = vsnprintf(&ch, 1, format, args);
 #endif
-    va_end(args);
 
-    if (result == 0)
+    if (!result) {
+        va_end(argsCopy);
         return emptyString();
-    if (result < 0)
+    }
+    if (result < 0) {
+        va_end(argsCopy);
         return String();
+    }
 
     Vector<char, 256> buffer;
     unsigned len = result;