From patchwork Tue Jul 12 22:28:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Don Breazeal X-Patchwork-Id: 13768 Received: (qmail 73094 invoked by alias); 12 Jul 2016 22:28:47 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 73082 invoked by uid 89); 12 Jul 2016 22:28:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=february, February, maint, sanitize X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 12 Jul 2016 22:28:36 +0000 Received: from svr-orw-fem-04.mgc.mentorg.com ([147.34.97.41]) by relay1.mentorg.com with esmtp id 1bN6AL-0006YU-Tx from Don_Breazeal@mentor.com ; Tue, 12 Jul 2016 15:28:33 -0700 Received: from build4-trusty-cs (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.3.224.2; Tue, 12 Jul 2016 15:28:33 -0700 Received: by build4-trusty-cs (Postfix, from userid 1905) id 6F66D1C085D; Tue, 12 Jul 2016 15:28:33 -0700 (PDT) From: Don Breazeal To: , Subject: Re: [PATCH v2] Escape paths used in regular expressions Date: Tue, 12 Jul 2016 15:28:33 -0700 Message-ID: <1468362513-94220-1-git-send-email-donb@codesourcery.com> In-Reply-To: <56BB791E.40309@redhat.com> MIME-Version: 1.0 X-IsSubscribed: yes 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 Don Breazeal 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(-) 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 $" {