From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 723 invoked by alias); 6 Aug 2010 15:47:21 -0000 Received: (qmail 705 invoked by uid 22791); 6 Aug 2010 15:47:18 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=AWL,BAYES_00,MSGID_MULTIPLE_AT X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.154) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 06 Aug 2010 15:47:10 +0000 Received: from baal.u-strasbg.fr (baal.u-strasbg.fr [IPv6:2001:660:2402::41]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o76Fknk4011882 ; Fri, 6 Aug 2010 17:46:49 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms8.u-strasbg.fr [IPv6:2001:660:2402:d::17]) by baal.u-strasbg.fr (8.14.0/jtpda-5.5pre1) with ESMTP id o76Fkm7M071094 ; Fri, 6 Aug 2010 17:46:49 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from d620muller (gw-ics.u-strasbg.fr [130.79.210.225]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id o76Fkl0n083169 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) ; Fri, 6 Aug 2010 17:46:48 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: "'Jan Kratochvil'" Cc: References: <001801cb3578$15f7a550$41e6eff0$@muller@ics-cnrs.unistra.fr> <20100806150750.GA25094@host1.dyn.jankratochvil.net> In-Reply-To: <20100806150750.GA25094@host1.dyn.jankratochvil.net> Subject: RE: [RFA] testsuite: Avoid buffer overrun in gdb.base/default.exp Date: Fri, 06 Aug 2010 15:47:00 -0000 Message-ID: <003501cb357e$bdf17320$39d45960$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-08/txt/msg00070.txt.bz2 > -----Message d'origine----- > De=A0: gdb-patches-owner@sourceware.org [mailto:gdb-patches- > owner@sourceware.org] De la part de Jan Kratochvil > Envoy=E9=A0: Friday, August 06, 2010 5:08 PM > =C0=A0: Pierre Muller > Cc=A0: gdb-patches@sourceware.org > Objet=A0: Re: [RFA] testsuite: Avoid buffer overrun in > gdb.base/default.exp >=20 > On Fri, 06 Aug 2010 17:00:18 +0200, Pierre Muller wrote: >=20 > When using attachments please use: > Content-Disposition: inline > and not > Content-Disposition: attachment Sorry, but I am bound to "Microsoft Outlook" and=20 don't know where I can set this option :( I usually directly insert the patch inside the email itself, but when there are very long line like in this case, this can lead to troubles... =20 > +gdb_test_multiple "info set" "info set" { > + -re "confirm: Whether to confirm potentially dangerous operations > is o\[a-z\]*.(\[^\r\n\]*\[\r\n\])+history filename: The filename in > which to record the command history is (\[^\r\n\]*\[\r\n\])+listsize: > Number of source lines gdb will list by default is 10.*" { > + verbose "Confirm dislayed" > + set set_confirm_seen 1 > + exp_continue > + } > + -re "Gdb's prompt is \"$gdb_prompt \"" { > + verbose "GDB prompt displayed" > + set set_prompt_seen 1 > + exp_continue > + } > + -re "Writing into executable.*$gdb_prompt $" { > + verbose "write displayed" > + if { $set_prompt_seen && $set_confirm_seen } { > + pass "info set" > + } else { > + verbose "prompt $set_prompt_seen confirm $set_confirm_seen" > + fail "info set (incomplete output)" > + } > + } > +} >=20 > The first pattern can eat up the text expected to be matched by the > third > pattern. This way the loop will never finish. Or do I miss something? You might be right, I should remove the final ".*" from the first pattern, this is an oversight. > The first pattern can match at once something like: > confirm: Whether to confirm potentially dangerous operations is o > history filename: The filename in which to record the command history > is listsize: Number of source lines gdb will list by default is 10 > Writing into executable (gdb) Thanks for that valuable contribution. Below is a modified patch that removes the ".*" at the end of the two first patterns. The results on the test machine I used are unchanged. Pierre Direct inclusion try: 2010-08-06 Pierre Muller * gdb.base/default.exp (info set): Avoid full buffer error and force reading up to final gdb prompt. (show): Likewise. Index: src/gdb/testsuite/gdb.base/default.exp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/testsuite/gdb.base/default.exp,v retrieving revision 1.43 diff -u -p -r1.43 default.exp --- src/gdb/testsuite/gdb.base/default.exp 7 Jul 2010 18:49:51 -0000 1.43 +++ src/gdb/testsuite/gdb.base/default.exp 6 Aug 2010 13:41:24 -0000 @@ -316,10 +316,37 @@ gdb_test "info s" "No stack." "info stac #test info stack gdb_test "info stack" "No stack." "info stack" #test info set -# FIXME -- needs to match the entire output -# FIXME -- on native solaris 2.8, this test fails due to this line: +# Test improved to check three parts: +# 1) confirm +# 2) prompt +# 3) write +# And only succeed if all three are matched. +# This should fix an old problem on native solaris 2.8, +# where this test fails due to this line: # prompt: Gdb's prompt is "(gdb) ".^M -gdb_test "info set" "confirm: Whether to confirm potentially dangerous operations is o\[a-z\]*.(\[^\r\n\]*\[\r\n\])+history filename: The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+listsize: Number of source lines gdb will list by default is 10.*" "info set" +set set_confirm_seen 0 +set set_prompt_seen 0 +gdb_test_multiple "info set" "info set" { + -re "confirm: Whether to confirm potentially dangerous operations is o\[a-z\]*.(\[^\r\n\]*\[\r\n\])+history filename: The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+listsize: Number of source lines gdb will list by default is 10" { + verbose "Confirm dislayed" + set set_confirm_seen 1 + exp_continue + } + -re "Gdb's prompt is \"$gdb_prompt \"" { + verbose "GDB prompt displayed" + set set_prompt_seen 1 + exp_continue + } + -re "Writing into executable.*$gdb_prompt $" { + verbose "write displayed" + if { $set_prompt_seen && $set_confirm_seen } { + pass "info set" + } else { + verbose "prompt $set_prompt_seen confirm $set_confirm_seen" + fail "info set (incomplete output)" + } + } +} gdb_test "info symbol" "Argument required .address.." #test info source gdb_test "info source" "No current source file..*" "info source" @@ -651,7 +678,29 @@ gdb_test "show width" "Number of charact # This is only supported on targets which use exec.o. gdb_test "show write" "Writing into executable and core files is o.*" "show write" #test show -gdb_test "show" "confirm: *Whether to confirm potentially dangerous operations is on.(\[^\r\n\]*\[\r\n\])+history filename: *The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+history save: *Saving of the history record on exit is on.(\[^\r\n\]*\[\r\n\])+history size: *The size of the command history is(\[^\r\n\]*\[\r\n\])+listsize: *Number of source lines gdb will list by default is 10(\[^\r\n]*\[\r\n\])+print elements: *Limit on string chars or array elements to print is 200..*" "show" +set show_confirm_seen 0 +set show_prompt_seen 0 +gdb_test_multiple "show" "show" { + -re "confirm: *Whether to confirm potentially dangerous operations is on.(\[^\r\n\]*\[\r\n\])+history filename: *The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+history save: *Saving of the history record on exit is on.(\[^\r\n\]*\[\r\n\])+history size: *The size of the command history is(\[^\r\n\]*\[\r\n\])+listsize: *Number of source lines gdb will list by default is 10(\[^\r\n]*\[\r\n\])+print elements: *Limit on string chars or array elements to print is 200." { + verbose "Confirm dislayed" + set show_confirm_seen 1 + exp_continue + } + -re "Gdb's prompt is \"$gdb_prompt \"" { + verbose "GDB prompt displayed" + set show_prompt_seen 1 + exp_continue + } + -re "Writing into executable.*$gdb_prompt $" { + verbose "write displayed" + if { $show_prompt_seen && $show_confirm_seen } { + pass "show" + } else { + verbose "prompt $show_prompt_seen confirm $show_confirm_seen" + fail "show (incomplete output)" + } + } +} #test stepi "si" abbreviation gdb_test "si" "The program is not being run." "stepi \"si\" abbreviation" #test stepi