Don't pass a reference type to va_start
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Jan 2011 22:02:58 +0000 (22:02 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Jan 2011 22:02:58 +0000 (22:02 +0000)
C++ says this results in undefined behavior:

    The restrictions that ISO C places on the second parameter to the
    va_start() macro in header <stdarg.h> are different in this
    International Standard. The parameter parmN is the identifier of
    the rightmost parameter in the variable parameter list of the
    function definition (the one just before the ...).221) If the
    parameter parmN is declared with a function, array, or reference
    type, or with a type that is not compatible with the type that
    results when passing an argument for which there is no parameter,
    the behavior is undefined.

Fixes <http://webkit.org/b/52168> Title of standalone image document
includes bogus image dimensions

Rubber-stamped by Eric Seidel.

* WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
(WebKit::formatLocalizedString): Don't use a reference type for
|format|.

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

WebKit2/ChangeLog
WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp

index f886855e376713ee0378007c49fdbfbec7c8f262..963274caef313908c7155a05d89ec6cc608e9dfa 100644 (file)
@@ -1,3 +1,28 @@
+2011-01-10  Adam Roben  <aroben@apple.com>
+
+        Don't pass a reference type to va_start
+
+        C++ says this results in undefined behavior:
+
+            The restrictions that ISO C places on the second parameter to the
+            va_start() macro in header <stdarg.h> are different in this
+            International Standard. The parameter parmN is the identifier of
+            the rightmost parameter in the variable parameter list of the
+            function definition (the one just before the ...).221) If the
+            parameter parmN is declared with a function, array, or reference
+            type, or with a type that is not compatible with the type that
+            results when passing an argument for which there is no parameter,
+            the behavior is undefined.
+
+        Fixes <http://webkit.org/b/52168> Title of standalone image document
+        includes bogus image dimensions
+
+        Rubber-stamped by Eric Seidel.
+
+        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+        (WebKit::formatLocalizedString): Don't use a reference type for
+        |format|.
+
 2011-01-10  Siddharth Mathur  <siddharth.mathur@nokia.com>
 
         Reviewed by Eric Seidel.
index 1730613f3c6734f243ee8ccc0d9ecb3c0a12b51d..67fa3aac15fe1cfff7d677e964f2eb95926dcd7e 100644 (file)
@@ -52,7 +52,9 @@ namespace WebKit {
 // We can't use String::format for two reasons:
 //  1) It doesn't handle non-ASCII characters in the format string.
 //  2) It doesn't handle the %2$d syntax.
-static String formatLocalizedString(const String& format, ...)
+// Note that because |format| is used as the second paramter to va_start, it cannot be a reference
+// type according to section 18.7/3 of the C++ N1905 standard.
+static String formatLocalizedString(String format, ...)
 {
 #if PLATFORM(CF)
     va_list arguments;