diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-09-28 13:57:51 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-09-28 13:57:51 (GMT) |
| commit | 42bd6877bcc8794524e5be946458a4427994b7a6 (patch) | |
| tree | ac86375700acefe62f8c3f45bb03a2a738f823f4 /generic/tclArithSeries.c | |
| parent | 93e50d1448aba1ed4b5eb113ea5c9b5debee85dc (diff) | |
| download | tcl-42bd6877bcc8794524e5be946458a4427994b7a6.zip tcl-42bd6877bcc8794524e5be946458a4427994b7a6.tar.gz tcl-42bd6877bcc8794524e5be946458a4427994b7a6.tar.bz2 | |
Fix wrong TclGetNumberFromObj() usage: this will crash if mp_int's are involved. Everywhere else in Tcl it is used correctly
Diffstat (limited to 'generic/tclArithSeries.c')
| -rwxr-xr-x | generic/tclArithSeries.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/generic/tclArithSeries.c b/generic/tclArithSeries.c index 868ce74..61b4a9b 100755 --- a/generic/tclArithSeries.c +++ b/generic/tclArithSeries.c @@ -229,26 +229,24 @@ TclNewArithSeriesDbl(double start, double end, double step, Tcl_WideInt len) static void assignNumber(int useDoubles, Tcl_WideInt *intNumberPtr, double *dblNumberPtr, Tcl_Obj *numberObj) { - union { - double d; - Tcl_WideInt i; - } *number; + void *clientData; int tcl_number_type; - if (TclGetNumberFromObj(NULL, numberObj, (void **)&number, &tcl_number_type) != TCL_OK) { + if (TclGetNumberFromObj(NULL, numberObj, &clientData, &tcl_number_type) != TCL_OK + || tcl_number_type == TCL_NUMBER_BIG) { return; } if (useDoubles) { - if (tcl_number_type == TCL_NUMBER_DOUBLE) { - *dblNumberPtr = number->d; + if (tcl_number_type != TCL_NUMBER_INT) { + *dblNumberPtr = *(double *)clientData; } else { - *dblNumberPtr = (double)number->i; + *dblNumberPtr = (double)*(Tcl_WideInt *)clientData; } } else { if (tcl_number_type == TCL_NUMBER_INT) { - *intNumberPtr = number->i; + *intNumberPtr = *(Tcl_WideInt *)clientData; } else { - *intNumberPtr = (Tcl_WideInt)number->d; + *intNumberPtr = (Tcl_WideInt)*(double *)clientData; } } } |
