[v2] Escape paths used in regular expressions

Message ID 1468362513-94220-1-git-send-email-donb@codesourcery.com
State New, archived
Headers

Commit Message

Don Breazeal July 12, 2016, 10:28 p.m. UTC
  Zach had submitted this patch back in February, and Pedro had approved it,
but it was never pushed in.  I've taken over responsibility for this item.

Neither of the affected expect scripts have been changed since this was
approved.  However, I fixed a typo in the original patch, changing
string_to_regex to string_to_regexp.

Verified that this patch fixes the tests when run in a directory with
a name containing "++" on native Linux x86_64.

OK to push this in?

Thanks
--Don

---
This patch fixes problems with a few GDB testsuites when executing in a
path that contains special characters (e.g. "++").  When such paths are
used as a regular expression, the regular expression parser will choke
and cause the tests to fail.  This patch uses string_to_regexp to
escape strings that will be used as regular expressions, in order to
sanitize path names used in expect scripts.

2016-07-12  Zachary Welch  <zwelch@codesourcery.com>
	    Don Breazeal <donb@codesourcery.com>

	gdb/testsuite/ChangeLog:
	* gdb.base/maint.exp: Escape paths used in regular expressions.
	* gdb.stabs/weird.exp: Likewise.

---
 gdb/testsuite/gdb.base/maint.exp  | 15 +++++++++------
 gdb/testsuite/gdb.stabs/weird.exp |  3 ++-
 2 files changed, 11 insertions(+), 7 deletions(-)
  

Comments

Yao Qi July 15, 2016, 1:34 p.m. UTC | #1
On Tue, Jul 12, 2016 at 11:28 PM, Don Breazeal <donb@codesourcery.com> wrote:
> Zach had submitted this patch back in February, and Pedro had approved it,
> but it was never pushed in.  I've taken over responsibility for this item.
>
> Neither of the affected expect scripts have been changed since this was
> approved.  However, I fixed a typo in the original patch, changing
> string_to_regex to string_to_regexp.
>
> Verified that this patch fixes the tests when run in a directory with
> a name containing "++" on native Linux x86_64.
>
> OK to push this in?

Yes, it is OK.
  
Don Breazeal July 15, 2016, 6:24 p.m. UTC | #2
On 7/15/2016 6:34 AM, Yao Qi wrote:
> On Tue, Jul 12, 2016 at 11:28 PM, Don Breazeal <donb@codesourcery.com> wrote:
>> Zach had submitted this patch back in February, and Pedro had approved it,
>> but it was never pushed in.  I've taken over responsibility for this item.
>>
>> Neither of the affected expect scripts have been changed since this was
>> approved.  However, I fixed a typo in the original patch, changing
>> string_to_regex to string_to_regexp.
>>
>> Verified that this patch fixes the tests when run in a directory with
>> a name containing "++" on native Linux x86_64.
>>
>> OK to push this in?
> 
> Yes, it is OK.
> 
Thanks Yao.
I've pushed this in.
--Don
  

Patch

diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp
index f926c8b..e66f566 100644
--- a/gdb/testsuite/gdb.base/maint.exp
+++ b/gdb/testsuite/gdb.base/maint.exp
@@ -213,12 +213,13 @@  gdb_test "maint print psymbols" \
 
 if { ! $have_gdb_index } {
     set psymbols_output [standard_output_file psymbols_output]
+    set psymbols_output_re [string_to_regexp $psymbols_output]
     send_gdb "maint print psymbols $psymbols_output ${srcdir}/${subdir}/${srcfile}\n"
     gdb_expect  {
-	-re "^maint print psymbols $psymbols_output \[^\n\]*\r\n$gdb_prompt $" {
+	-re "^maint print psymbols $psymbols_output_re \[^\n\]*\r\n$gdb_prompt $" {
 	    send_gdb "shell ls $psymbols_output\n"
 	    gdb_expect {
-		-re "$psymbols_output\r\n$gdb_prompt $" {
+		-re "$psymbols_output_re\r\n$gdb_prompt $" {
 		    # We want this grep to be as specific as possible,
 		    # so it's less likely to match symbol file names in
 		    # psymbols_output.  Yes, this actually happened;
@@ -253,12 +254,13 @@  gdb_test "maint print msymbols" \
 
 
 set msymbols_output [standard_output_file msymbols_output]
+set msymbols_output_re [string_to_regexp $msymbols_output]
 send_gdb "maint print msymbols $msymbols_output ${binfile}\n"
 gdb_expect  {
-    -re "^maint print msymbols $msymbols_output \[^\n\]*\r\n$gdb_prompt $" {
+    -re "^maint print msymbols $msymbols_output_re \[^\n\]*\r\n$gdb_prompt $" {
 	send_gdb "shell ls $msymbols_output\n"
 	gdb_expect {
-	    -re "$msymbols_output\r\n$gdb_prompt $" {
+	    -re "$msymbols_output_re\r\n$gdb_prompt $" {
 		send_gdb "shell grep factorial $msymbols_output\n"
 		gdb_expect {
 		    -re "\\\[ *$decimal\\\] \[tT\]\[ \t\]+$hex \\.?factorial.*$gdb_prompt $" {
@@ -331,12 +333,13 @@  gdb_test "maint print symbols" \
 # for GNU libc.
 
 set symbols_output [standard_output_file symbols_output]
+set symbols_output_re [string_to_regexp $symbols_output]
 send_gdb "maint print symbols $symbols_output ${srcdir}/${subdir}/${srcfile}\n"
 gdb_expect  {
-    -re "^maint print symbols $symbols_output \[^\n\]*\r\n$gdb_prompt $" {
+    -re "^maint print symbols $symbols_output_re \[^\n\]*\r\n$gdb_prompt $" {
 	send_gdb "shell ls $symbols_output\n"
 	gdb_expect {
-	    -re "$symbols_output\r\n$gdb_prompt $" {
+	    -re "$symbols_output_re\r\n$gdb_prompt $" {
 		# See comments for `maint print psymbols'.
 		send_gdb "shell grep 'main(.*block' $symbols_output\n"
 		gdb_expect {
diff --git a/gdb/testsuite/gdb.stabs/weird.exp b/gdb/testsuite/gdb.stabs/weird.exp
index fa418ed..2a8ef3e 100644
--- a/gdb/testsuite/gdb.stabs/weird.exp
+++ b/gdb/testsuite/gdb.stabs/weird.exp
@@ -284,6 +284,7 @@  gdb_reinitialize_dir $srcdir/$subdir
 
 set binfile [gdb_remote_download host ${binfile} \
 		 [standard_output_file object.o]]
+set binfile_re [string_to_regexp $binfile]
 send_gdb "file $binfile\n"
 # If $binfile is very long, a \r (but not a \n) will echo in the
 # middle of the echo of the command.  So to match the echo, we
@@ -300,7 +301,7 @@  gdb_expect 60 {
 	send_gdb "y\n"
 	exp_continue
     }
-    -re "^Reading symbols from .*$binfile\\.\\.\\.done\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)\r\n$gdb_prompt $" {
+    -re "^Reading symbols from .*$binfile_re\\.\\.\\.done\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)\r\n$gdb_prompt $" {
 	pass "weirdx.o read without error"
     }
     -re ".*$gdb_prompt $" {