summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgriffin <briang42@easystreet.net>2022-09-28 16:53:47 (GMT)
committergriffin <briang42@easystreet.net>2022-09-28 16:53:47 (GMT)
commitf67437d6f3387995beea7486af82b8da4f04a163 (patch)
treeeb842b526877e14cc565ff10b6191684065592d7
parent6cd7c9e3c209226e98b0b1995cbf90026d1385ff (diff)
parent7694cd7bef6d69dbd7d91d338f3626d9e6875e95 (diff)
downloadtcl-f67437d6f3387995beea7486af82b8da4f04a163.zip
tcl-f67437d6f3387995beea7486af82b8da4f04a163.tar.gz
tcl-f67437d6f3387995beea7486af82b8da4f04a163.tar.bz2
Fix bug-9933cc4d88 - not an error in 9
-rwxr-xr-xgeneric/tclArithSeries.c12
-rw-r--r--tests/lseq.test5
2 files changed, 12 insertions, 5 deletions
diff --git a/generic/tclArithSeries.c b/generic/tclArithSeries.c
index 937e629..1302780 100755
--- a/generic/tclArithSeries.c
+++ b/generic/tclArithSeries.c
@@ -282,7 +282,8 @@ TclNewArithSeriesObj(
Tcl_Obj *lenObj) /* Number of elements */
{
double dstart, dend, dstep;
- Tcl_WideInt start, end, step, len;
+ Tcl_WideInt start, end, step;
+ Tcl_WideInt len;
if (startObj) {
assignNumber(useDoubles, &start, &dstart, startObj);
@@ -306,7 +307,12 @@ TclNewArithSeriesObj(
assignNumber(useDoubles, &end, &dend, endObj);
}
if (lenObj) {
- Tcl_GetWideIntFromObj(NULL, lenObj, &len);
+ int tcl_number_type;
+ Tcl_WideInt *valuePtr;
+ if (TclGetNumberFromObj(interp, lenObj, (ClientData*)&valuePtr, &tcl_number_type) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ len = *valuePtr;
}
if (startObj && endObj) {
@@ -339,7 +345,7 @@ TclNewArithSeriesObj(
}
}
- if (len < 0 || (Tcl_WideUInt)len > ListSizeT_MAX) {
+ if (TCL_MAJOR_VERSION < 9 && len > ListSizeT_MAX) {
Tcl_SetObjResult(
interp,
Tcl_NewStringObj("max length of a Tcl list exceeded", -1));
diff --git a/tests/lseq.test b/tests/lseq.test
index 916229d..48adfa0 100644
--- a/tests/lseq.test
+++ b/tests/lseq.test
@@ -474,7 +474,7 @@ test lseq-4.3 {TIP examples} knownBug {
#
# Ticket 9933cc4d88697f05976accebd31c1e3ba6efe9c6 - lseq corner case
-test lseq-4.4 {lseq corner case} -constraints knownBug -body {
+test lseq-4.4 {lseq corner case} -body {
set tcmd {
set res {}
set s [catch {lindex [lseq 10 100] 0} e]
@@ -489,7 +489,8 @@ test lseq-4.4 {lseq corner case} -constraints knownBug -body {
lappend res $s $e
}
eval $tcmd
-} -result {0 10 1 {max length of a Tcl list exceeded} 1 {max length of a Tcl list exceeded} 0 10 0 2147483638}
+} -result {0 10 0 10 0 9223372036854774991 0 10 0 2147483638}
+# {0 10 1 {max length of a Tcl list exceeded} 1 {max length of a Tcl list exceeded} 0 10 0 2147483638}
# cleanup