Blob Blame History Raw
;; Fix comma handling in paths.
;; (Keith Seitz, RH BZ 1779246)

*** gdb-7.6.1.orig/gdb/linespec.c	2020-05-06 17:02:38.202690042 -0400
--- gdb-7.6.1/gdb/linespec.c	2020-05-07 16:22:23.959113669 -0400
*************** canonicalize_linespec (struct linespec_s
*** 1770,1776 ****
--- 1770,1782 ----
        buf = mem_fileopen ();
        if (ls->source_filename)
  	{
+ 	  int needs_quote = strchr (ls->source_filename, ',') != NULL;
+ 
+ 	  if (needs_quote)
+ 	    fputc_unfiltered ('\"', buf);
  	  fputs_unfiltered (ls->source_filename, buf);
+ 	  if (needs_quote)
+ 	    fputc_unfiltered ('\"', buf);
  	  need_colon = 1;
  	}
  
*** gdb-7.6.1.orig/gdb/testsuite/gdb.linespec/commas.exp	1969-12-31 19:00:00.000000000 -0500
--- gdb-7.6.1/gdb/testsuite/gdb.linespec/commas.exp	2020-05-07 15:20:35.398286038 -0400
***************
*** 0 ****
--- 1,61 ----
+ # Copyright 2020 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
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ # Test the use of commas in filenames.
+ # One simple rule to keep in mind regarding commas in filenames:
+ # they MUST be quote-enclosed.  Commas are used by dprintf to
+ # separate location, format string, and args.  Linespec also uses
+ # commas to separate locations for ranged breakpoints.
+ 
+ set one foozle,barzle/one.cc
+ set two foozle,barzle/barzle,bazzle/onezle,twozle.cc
+ standard_testfile $one
+ 
+ if {[skip_cplus_tests]} {
+     unsupported commas.exp
+     return
+ }
+ 
+ if {[prepare_for_testing ${testfile}.exp $testfile [list $one $two] \
+ 	 {debug nowarnings c++}]} {
+     return -1
+ }
+ 
+ # Turn off pending breakpoints to facilitate testing invalid linespecs.
+ gdb_test_no_output "set breakpoint pending off"
+ 
+ # The expected error message from GDB when an unquoted linespec
+ # is given which contains commas.
+ set unquoted_comma "Function \"[lindex [split $one ,] 0]\" not defined."
+ 
+ # Test that the default symtab is usable.
+ # We cannot runto main here -- that defeats the purpose of the test.
+ set first_line [gdb_get_line_number "break here" $one]
+ runto $first_line message
+ 
+ # Test directories with commas.
+ gdb_test "break $one:$first_line" $unquoted_comma \
+     "breakpoint at one:first_line"
+ runto "\"$one\":$first_line" message
+ gdb_test "list $one:0" $unquoted_comma
+ gdb_test "list \"$one\":0" "This testcase is part of GDB.*"
+ 
+ # Test filenames with commas.
+ set marker1 [gdb_get_line_number "marker 1" $two]
+ gdb_test "break $two:$marker1" $unquoted_comma \
+     "breakpoint at two:marker1"
+ runto "\"$two\":$marker1" message
+ gdb_test "list $two:0" $unquoted_comma
+ gdb_test "list \"$two\":0" "This testcase is part of GDB.*"
*** gdb-7.6.1.orig/gdb/testsuite/gdb.linespec/foozle,barzle/one.cc	1969-12-31 19:00:00.000000000 -0500
--- gdb-7.6.1/gdb/testsuite/gdb.linespec/foozle,barzle/one.cc	2020-05-07 13:23:52.293146501 -0400
***************
*** 0 ****
--- 1,26 ----
+ /* This testcase is part of GDB, the GNU debugger.
+ 
+    Copyright 2020 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
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+ 
+ extern int onetwo (int);
+ 
+ int
+ main ()
+ {
+   int i = 1; // break here
+ 
+   return onetwo (++i);
+ }
*** gdb-7.6.1.orig/gdb/testsuite/gdb.linespec/foozle,barzle/barzle,bazzle/onezle,twozle.cc	1969-12-31 19:00:00.000000000 -0500
--- gdb-7.6.1/gdb/testsuite/gdb.linespec/foozle,barzle/barzle,bazzle/onezle,twozle.cc	2020-05-07 13:58:41.720152058 -0400
***************
*** 0 ****
--- 1,22 ----
+ /* This testcase is part of GDB, the GNU debugger.
+ 
+    Copyright 2020 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
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+ 
+ int
+ onetwo (int i)
+ {
+   return i + 12; // marker 1
+ }