diff options
author | Kevin B Kenny <kennykb@acm.org> | 2008-06-17 02:16:06 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2008-06-17 02:16:06 (GMT) |
commit | 81826540aab2845b6b171f38dd9051e923e6031b (patch) | |
tree | ef258c0fb1e1a85526a0e6ed5936cc7b4084de06 /generic | |
parent | ec43fe476600ee215c4012baea54bdb62f394cd2 (diff) | |
download | tcl-81826540aab2845b6b171f38dd9051e923e6031b.zip tcl-81826540aab2845b6b171f38dd9051e923e6031b.tar.gz tcl-81826540aab2845b6b171f38dd9051e923e6031b.tar.bz2 |
2006-06-17 Kevin Kenny <kennykb@acm.org>
* generic/tclClock.c (ConvertLocalToUTC):
* tests/clock.test (clock-63.1): Fixed a bug where the
internal ConvertLocalToUTC command segfaulted if passed a
dictionary without the 'localSeconds' key. To the best of
my knowledge, the bug was not observable in the [clock]
command itself.
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclClock.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/generic/tclClock.c b/generic/tclClock.c index 12c2e64..a27deb6 100644 --- a/generic/tclClock.c +++ b/generic/tclClock.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclClock.c,v 1.66 2008/02/27 02:08:27 kennykb Exp $ + * RCS: @(#) $Id: tclClock.c,v 1.67 2008/06/17 02:16:06 kennykb Exp $ */ #include "tclInt.h" @@ -333,12 +333,20 @@ ClockConvertlocaltoutcObjCmd( return TCL_ERROR; } dict = objv[1]; - if ((Tcl_DictObjGet(interp, dict, literals[LIT_LOCALSECONDS], - &secondsObj) != TCL_OK) - || (Tcl_GetWideIntFromObj(interp, secondsObj, - &(fields.localSeconds)) != TCL_OK) - || (TclGetIntFromObj(interp, objv[3], &changeover) != TCL_OK) - || ConvertLocalToUTC(interp, &fields, objv[2], changeover)) { + if (Tcl_DictObjGet(interp, dict, literals[LIT_LOCALSECONDS], + &secondsObj)!= TCL_OK) { + fprintf(stderr, "fell out here\n"); fflush(stderr); + return TCL_ERROR; + } + if (secondsObj == NULL) { + Tcl_SetObjResult(interp, Tcl_NewStringObj("key \"localseconds\" not " + "found in dictionary", -1)); + return TCL_ERROR; + } + if ((Tcl_GetWideIntFromObj(interp, secondsObj, + &(fields.localSeconds)) != TCL_OK) + || (TclGetIntFromObj(interp, objv[3], &changeover) != TCL_OK) + || ConvertLocalToUTC(interp, &fields, objv[2], changeover)) { return TCL_ERROR; } |