summaryrefslogtreecommitdiffstats
path: root/generic/tclArithSeries.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-09-28 13:57:51 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-09-28 13:57:51 (GMT)
commit42bd6877bcc8794524e5be946458a4427994b7a6 (patch)
treeac86375700acefe62f8c3f45bb03a2a738f823f4 /generic/tclArithSeries.c
parent93e50d1448aba1ed4b5eb113ea5c9b5debee85dc (diff)
downloadtcl-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-xgeneric/tclArithSeries.c18
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;
}
}
}