diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | generic/tclScan.c | 8 | ||||
-rw-r--r-- | tests/scan.test | 6 |
3 files changed, 18 insertions, 2 deletions
@@ -1,3 +1,9 @@ +1999-11-29 Jeff Hobbs <hobbs@scriptics.com> + + * tests/scan.test: + * generic/tclScan.c: fixed scan where %[..] didn't match anything + and added test case [Bug: 3700] + 1999-11-24 Jeff Hobbs <hobbs@scriptics.com> * doc/open.n: diff --git a/generic/tclScan.c b/generic/tclScan.c index 3d7b37e..bf238cf 100644 --- a/generic/tclScan.c +++ b/generic/tclScan.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclScan.c,v 1.5 1999/11/19 06:34:24 hobbs Exp $ + * RCS: @(#) $Id: tclScan.c,v 1.6 1999/11/30 01:42:59 hobbs Exp $ */ #include "tclInt.h" @@ -810,6 +810,12 @@ Tcl_ScanObjCmd(dummy, interp, objc, objv) } ReleaseCharSet(&cset); + if (string == end) { + /* + * Nothing matched the range, stop processing + */ + goto done; + } if (!(flags & SCAN_SUPPRESS)) { objPtr = Tcl_NewStringObj(string, end-string); Tcl_IncrRefCount(objPtr); diff --git a/tests/scan.test b/tests/scan.test index 4957f9f..0d8d045 100644 --- a/tests/scan.test +++ b/tests/scan.test @@ -11,7 +11,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: scan.test,v 1.8 1999/11/19 06:35:01 hobbs Exp $ +# RCS: @(#) $Id: scan.test,v 1.9 1999/11/30 01:43:00 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest @@ -42,6 +42,10 @@ test scan-1.7 {BuildCharSet, CharInSet} { test scan-1.8 {BuildCharSet, CharInSet} { list [scan def-abc {%[^c-a]} x] $x } {1 def-} +test scan-1.9 {BuildCharSet, CharInSet no match} { + catch {unset x} + list [scan {= f} {= %[TF]} x] [info exists x] +} {0 0} test scan-2.1 {ReleaseCharSet} { list [scan abcde {%[abc]} x] $x |