summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2021-12-15 17:03:03 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2021-12-15 17:03:03 (GMT)
commit187de15e2bd4cc19b14e2a9b97ca1b12d847a2c9 (patch)
treeb2c889d1b7026d3804efb4161133fd0ea70968d6
parentcacd6930cf7caa54e575401e527dae2156bc8424 (diff)
downloadtcl-187de15e2bd4cc19b14e2a9b97ca1b12d847a2c9.zip
tcl-187de15e2bd4cc19b14e2a9b97ca1b12d847a2c9.tar.gz
tcl-187de15e2bd4cc19b14e2a9b97ca1b12d847a2c9.tar.bz2
Fix [90612089d8]: signed integer overflow in ExprRandFunc()
-rw-r--r--generic/tclBasic.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index fb85241..1cc22e1 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -7781,15 +7781,15 @@ ExprRandFunc(
* take into consideration the thread this interp is running in.
*/
- iPtr->randSeed = TclpGetClicks() + (PTR2INT(Tcl_GetCurrentThread())<<12);
+ iPtr->randSeed = TclpGetClicks() + ((unsigned long)PTR2UINT(Tcl_GetCurrentThread())*4093);
/*
* Make sure 1 <= randSeed <= (2^31) - 2. See below.
*/
- iPtr->randSeed &= (unsigned long) 0x7FFFFFFF;
- if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7FFFFFFF)) {
- iPtr->randSeed ^= 123459876;
+ iPtr->randSeed &= 0x7FFFFFFFL;
+ if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7FFFFFFFL)) {
+ iPtr->randSeed ^= 123459876L;
}
}