diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2012-01-22 13:08:15 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2012-01-22 13:08:15 (GMT) |
commit | d40680de05ee6071b6e4579157be4d7947a53ddd (patch) | |
tree | a9b17a915c64cabe839d46f2d245253603f390fb | |
parent | 4aed2bc2cd16fef4ffe748ec35725686038a4fbb (diff) | |
download | tcl-d40680de05ee6071b6e4579157be4d7947a53ddd.zip tcl-d40680de05ee6071b6e4579157be4d7947a53ddd.tar.gz tcl-d40680de05ee6071b6e4579157be4d7947a53ddd.tar.bz2 |
* generic/tclDictObj.c (DictExistsCmd): [Bug 3475264]: Ensure that
errors only ever happen when insufficient arguments are supplied, and
not when a path doesn't exist or a dictionary is poorly formatted (the
two cases can't be easily distinguished).
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | generic/tclDictObj.c | 16 | ||||
-rw-r--r-- | tests/dict.test | 4 |
3 files changed, 16 insertions, 17 deletions
@@ -1,6 +1,13 @@ +2012-01-22 Donal K. Fellows <dkf@users.sf.net> + + * generic/tclDictObj.c (DictExistsCmd): [Bug 3475264]: Ensure that + errors only ever happen when insufficient arguments are supplied, and + not when a path doesn't exist or a dictionary is poorly formatted (the + two cases can't be easily distinguished). + 2012-01-21 Jan Nijtmans <nijtmans@users.sf.net> - * generic/tcl.h: [Bug-3474726]: Eliminate detection of struct + * generic/tcl.h: [Bug 3474726]: Eliminate detection of struct * generic/tclWinPort.h: _stat32i64, just use _stati64 in combination * generic/tclFCmd.c: with _USE_32BIT_TIME_T, which is the same then. * generic/tclTest.c: Only keep _stat32i64 usage for cygwin, so it @@ -9,7 +16,7 @@ 2012-01-21 Don Porter <dgp@users.sourceforge.net> - * generic/tclCmdMZ.c: [Bug 3475667] Prevent buffer read overflow. + * generic/tclCmdMZ.c: [Bug 3475667]: Prevent buffer read overflow. Thanks to "sebres" for the report and fix. 2012-01-17 Donal K. Fellows <dkf@users.sf.net> @@ -31,7 +38,7 @@ 2012-01-09 Jan Nijtmans <nijtmans@users.sf.net> - * generic/tclUtf.c: [Bug 3464428] string is graph \u0120 is wrong + * generic/tclUtf.c: [Bug 3464428]: string is graph \u0120 is wrong * generic/regc_locale.c: Add table for Unicode [:cntrl:] class * tools/uniClass.tcl: Generate Unicode [:cntrl:] class table * tests/utf.test: diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c index 06c5754..03c4d67 100644 --- a/generic/tclDictObj.c +++ b/generic/tclDictObj.c @@ -1969,7 +1969,6 @@ DictExistsCmd( Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *valuePtr; - int result; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "dictionary key ?key ...?"); @@ -1978,18 +1977,13 @@ DictExistsCmd( dictPtr = TclTraceDictPath(interp, objv[1], objc-3, objv+2, DICT_PATH_EXISTS); - if (dictPtr == NULL) { - return TCL_ERROR; - } - if (dictPtr == DICT_PATH_NON_EXISTENT) { + if (dictPtr == NULL || dictPtr == DICT_PATH_NON_EXISTENT + || Tcl_DictObjGet(interp, dictPtr, objv[objc-1], + &valuePtr) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(0)); - return TCL_OK; - } - result = Tcl_DictObjGet(interp, dictPtr, objv[objc-1], &valuePtr); - if (result != TCL_OK) { - return result; + } else { + Tcl_SetObjResult(interp, Tcl_NewBooleanObj(valuePtr != NULL)); } - Tcl_SetObjResult(interp, Tcl_NewBooleanObj(valuePtr != NULL)); return TCL_OK; } diff --git a/tests/dict.test b/tests/dict.test index cfaf36d..5821c32 100644 --- a/tests/dict.test +++ b/tests/dict.test @@ -222,9 +222,7 @@ test dict-9.2 {dict exists command} {dict exists {a b} b} 0 test dict-9.3 {dict exists command} {dict exists {a {b c}} a b} 1 test dict-9.4 {dict exists command} {dict exists {a {b c}} a c} 0 test dict-9.5 {dict exists command} {dict exists {a {b c}} b c} 0 -test dict-9.6 {dict exists command} { - list [catch {dict exists {a {b c d}} a c} msg] $msg -} {1 {missing value to go with key}} +test dict-9.6 {dict exists command} {dict exists {a {b c d}} a c} 0 test dict-9.7 {dict exists command} { list [catch {dict exists} msg] $msg } {1 {wrong # args: should be "dict exists dictionary key ?key ...?"}} |