Handle '#' flag for printf of pointer types.
authorAndrew Burgess <aburgess@broadcom.com>
Tue, 13 Aug 2013 16:05:23 +0000 (16:05 +0000)
committerAndrew Burgess <aburgess@broadcom.com>
Tue, 13 Aug 2013 16:05:23 +0000 (16:05 +0000)
  http://sourceware.org/ml/gdb-patches/2013-08/msg00340.html

gdb/ChangeLog

* common/format.c (parse_format_string): Don't allow '#' flag for
pointer arguments in format string.

gdb/testsuite/ChangeLog

* gdb.base/printcmds.exp (test_printf): Add test for printf of
pointer with various flags.

gdb/ChangeLog
gdb/common/format.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/printcmds.exp

index 22fb07c..99fa18b 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-13  Andrew Burgess  <aburgess@broadcom.com>
+
+       * common/format.c (parse_format_string): Don't allow '#' flag for
+       pointer arguments in format string.
+
 2013-08-13  Pierre Muller  <muller@sourceware.org>
 
        * src/gdb/utils.c (init_page_info): Only call tgetnum function
index 1bdd253..985e0e4 100644 (file)
@@ -263,7 +263,9 @@ parse_format_string (const char **arg)
            this_argclass = ptr_arg;
            if (lcount || seen_h || seen_big_l)
              bad = 1;
-           if (seen_prec || seen_zero || seen_space || seen_plus)
+           if (seen_prec)
+             bad = 1;
+           if (seen_hash || seen_zero || seen_space || seen_plus)
              bad = 1;
            break;
 
index 88680db..0b60da5 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-13  Andrew Burgess  <aburgess@broadcom.com>
+
+       * gdb.base/printcmds.exp (test_printf): Add test for printf of
+       pointer with various flags.
+
 2013-08-13  Tom Tromey  <tromey@redhat.com>
 
        * lib/cache.exp: New file.
index 4f88382..60e4a7f 100644 (file)
@@ -734,6 +734,12 @@ proc test_printf {} {
     gdb_test "printf \"%.234\", 0" "Incomplete format specifier at end of format string"
     gdb_test "printf \"%-\", 0" "Incomplete format specifier at end of format string"
     gdb_test "printf \"%-23\", 0" "Incomplete format specifier at end of format string"
+
+    # Test for invalid printf flags on pointer types.
+    gdb_test "printf \"%#p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
+    gdb_test "printf \"% p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
+    gdb_test "printf \"%0p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
+    gdb_test "printf \"%+p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
 }
 
 #Test printing DFP values with printf