test-xvasprintf: disable some -Wformat-security diagnostics
[gnulib.git] / tests / test-xvasprintf.c
index 5296b67..0987225 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of xvasprintf() and xasprintf() functions.
-   Copyright (C) 2007-2009 Free Software Foundation, Inc.
+   Copyright (C) 2007-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
+/* Tell GCC not to warn about the specific edge cases tested here.  */
+#if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__
+# pragma GCC diagnostic ignored "-Wformat-zero-length"
+# pragma GCC diagnostic ignored "-Wformat-nonliteral"
+# pragma GCC diagnostic ignored "-Wformat-security"
+#endif
+
 #include <config.h>
 
 #include "xvasprintf.h"
 
 #include <stdarg.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include "progname.h"
-
-#define ASSERT(expr) \
-  do                                                                        \
-    {                                                                       \
-      if (!(expr))                                                          \
-        {                                                                   \
-          fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
-          fflush (stderr);                                                  \
-          abort ();                                                         \
-        }                                                                   \
-    }                                                                       \
-  while (0)
+#include "macros.h"
 
 static char *
 my_xasprintf (const char *format, ...)
@@ -65,25 +60,33 @@ test_xvasprintf (void)
       free (result);
     }
 
-  result = my_xasprintf ("");
-  ASSERT (result != NULL);
-  ASSERT (strcmp (result, "") == 0);
+  {
+    /* Silence gcc warning about zero-length format string.  */
+    const char *empty = "";
+    result = my_xasprintf (empty);
+    ASSERT (result != NULL);
+    ASSERT (strcmp (result, "") == 0);
+    free (result);
+  }
 
   result = my_xasprintf ("%s", "foo");
   ASSERT (result != NULL);
   ASSERT (strcmp (result, "foo") == 0);
+  free (result);
 
   result = my_xasprintf ("%s%s", "foo", "bar");
   ASSERT (result != NULL);
   ASSERT (strcmp (result, "foobar") == 0);
+  free (result);
 
   result = my_xasprintf ("%s%sbaz", "foo", "bar");
   ASSERT (result != NULL);
   ASSERT (strcmp (result, "foobarbaz") == 0);
+  free (result);
 }
 
 static void
-test_xasprintf ()
+test_xasprintf (void)
 {
   int repeat;
   char *result;
@@ -96,25 +99,35 @@ test_xasprintf ()
       free (result);
     }
 
-  result = xasprintf ("");
-  ASSERT (result != NULL);
-  ASSERT (strcmp (result, "") == 0);
+  {
+    /* Silence gcc warning about zero-length format string,
+       and about "format not a string literal and no format"
+       (whatever that means) .  */
+    const char *empty = "";
+    result = xasprintf (empty, empty);
+    ASSERT (result != NULL);
+    ASSERT (strcmp (result, "") == 0);
+    free (result);
+  }
 
   result = xasprintf ("%s", "foo");
   ASSERT (result != NULL);
   ASSERT (strcmp (result, "foo") == 0);
+  free (result);
 
   result = xasprintf ("%s%s", "foo", "bar");
   ASSERT (result != NULL);
   ASSERT (strcmp (result, "foobar") == 0);
+  free (result);
 
   result = my_xasprintf ("%s%sbaz", "foo", "bar");
   ASSERT (result != NULL);
   ASSERT (strcmp (result, "foobarbaz") == 0);
+  free (result);
 }
 
 int
-main (int argc _UNUSED_PARAMETER_, char *argv[])
+main (int argc _GL_UNUSED, char *argv[])
 {
   set_program_name (argv[0]);