summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2006-04-06 18:57:57 (GMT)
committerdgp <dgp@users.sourceforge.net>2006-04-06 18:57:57 (GMT)
commit66eb0f67f7cc2d152c918f5ccfe94cd89a7581fe (patch)
treea534618cc4c2f2aaf245bbb836151adc72a04975
parent5236fc67c64ed64fa5b75bc48a4ef5dd2ae44e0f (diff)
downloadtcl-66eb0f67f7cc2d152c918f5ccfe94cd89a7581fe.zip
tcl-66eb0f67f7cc2d152c918f5ccfe94cd89a7581fe.tar.gz
tcl-66eb0f67f7cc2d152c918f5ccfe94cd89a7581fe.tar.bz2
* 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]
-rw-r--r--ChangeLog6
-rw-r--r--doc/GetIndex.34
-rw-r--r--generic/tclIndexObj.c4
-rw-r--r--tests/indexObj.test10
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 <dgp@users.sourceforge.net>
+ * 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