From 66eb0f67f7cc2d152c918f5ccfe94cd89a7581fe Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 6 Apr 2006 18:57:57 +0000 Subject: * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): It seems * tests/indexObj.test: there are extensions that rely on the prior * doc/GetIndex.3: behavior that the empty string cannot succeed as a unique prefix matcher, so I'm restoring Donal Fellow's solution. Added mention of this detail to the documentation. [Bug 1464039] --- ChangeLog | 6 ++++++ doc/GetIndex.3 | 4 ++-- generic/tclIndexObj.c | 4 ++-- tests/indexObj.test | 10 +++++++--- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index fcbfb64..d2dcd34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2006-04-06 Don Porter + * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): It seems + * tests/indexObj.test: there are extensions that rely on the prior + * doc/GetIndex.3: behavior that the empty string cannot succeed + as a unique prefix matcher, so I'm restoring Donal Fellow's solution. + Added mention of this detail to the documentation. [Bug 1464039] + * tests/compExpr-old.test: Updated testmathfunctions constraint * tests/compExpr.test: to post-TIP-232 world. * tests/expr-old.test: diff --git a/doc/GetIndex.3 b/doc/GetIndex.3 index f476ea5..4b4a220 100644 --- a/doc/GetIndex.3 +++ b/doc/GetIndex.3 @@ -4,7 +4,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: GetIndex.3,v 1.18 2005/05/10 18:33:56 kennykb Exp $ +'\" RCS: @(#) $Id: GetIndex.3,v 1.19 2006/04/06 18:57:58 dgp Exp $ '\" .so man.macros .TH Tcl_GetIndexFromObj 3 8.1 Tcl "Tcl Library Procedures" @@ -60,7 +60,7 @@ an object must be one of a predefined set of values. \fIObjPtr\fR is compared against each of the strings in \fItablePtr\fR to find a match. A match occurs if \fIobjPtr\fR's string value is identical to one of the strings in -\fItablePtr\fR, or if it is a unique abbreviation +\fItablePtr\fR, or if it is a non-empty unique abbreviation for exactly one of the strings in \fItablePtr\fR and the \fBTCL_EXACT\fR flag was not specified; in either case the index of the matching entry is stored at \fI*indexPtr\fR diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c index be60517..df658dd 100644 --- a/generic/tclIndexObj.c +++ b/generic/tclIndexObj.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIndexObj.c,v 1.30 2006/04/05 15:17:39 dgp Exp $ + * RCS: @(#) $Id: tclIndexObj.c,v 1.31 2006/04/06 18:57:58 dgp Exp $ */ #include "tclInt.h" @@ -226,7 +226,7 @@ Tcl_GetIndexFromObjStruct( * Check if we were instructed to disallow abbreviations. */ - if ((flags & TCL_EXACT) || (numAbbrev != 1)) { + if ((flags & TCL_EXACT) || (key[0] == '\0') || (numAbbrev != 1)) { goto error; } diff --git a/tests/indexObj.test b/tests/indexObj.test index bb1c0a4..4c1ef49 100644 --- a/tests/indexObj.test +++ b/tests/indexObj.test @@ -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: indexObj.test,v 1.14 2006/04/06 18:19:25 dgp Exp $ +# RCS: @(#) $Id: indexObj.test,v 1.15 2006/04/06 18:57:58 dgp Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest @@ -70,8 +70,12 @@ test indexObj-2.8 {exact match of empty values: singleton case} testindexobj { list [catch {testindexobj 1 0 {} a} msg] $msg } {1 {bad token "": must be a}} test indexObj-2.9 {non-exact match of empty values: singleton case} testindexobj { - testindexobj 1 1 {} a -} 0 + # NOTE this is a special case. Although the empty string is a + # unique prefix, we have an established history of rejecting + # empty lookup keys, requiring any unique prefix match to have + # at least one character. + list [catch {testindexobj 1 1 {} a} msg] $msg +} {1 {bad token "": must be a}} test indexObj-3.1 {cache result to skip next lookup} testindexobj { testindexobj check 42 -- cgit v0.12