summaryrefslogtreecommitdiffstats
path: root/generic/regc_color.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-04-08 19:59:03 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-04-08 19:59:03 (GMT)
commit55102c2b83a91074eb32c07fb5930ccc9ca00c44 (patch)
tree66cc82c126d9de0e6ce6bc9579d76026b029826b /generic/regc_color.c
parente0dbb5bd6286d83d5bffb1ee2890569951dce5d4 (diff)
parent7ff52157edb4f8563b115be8ef48d116e3730e0d (diff)
downloadtcl-55102c2b83a91074eb32c07fb5930ccc9ca00c44.zip
tcl-55102c2b83a91074eb32c07fb5930ccc9ca00c44.tar.gz
tcl-55102c2b83a91074eb32c07fb5930ccc9ca00c44.tar.bz2
3610026 Stop crash when the number of "colors" in a regular expression
overflows a short int. Thanks to Heikki Linnakangas for the report and the patch.
Diffstat (limited to 'generic/regc_color.c')
-rw-r--r--generic/regc_color.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/generic/regc_color.c b/generic/regc_color.c
index ba1f668..58de004 100644
--- a/generic/regc_color.c
+++ b/generic/regc_color.c
@@ -254,7 +254,14 @@ newcolor(
* Oops, must allocate more.
*/
+ if (cm->max == MAX_COLOR) {
+ CERR(REG_ECOLORS);
+ return COLORLESS; /* too many colors */
+ }
n = cm->ncds * 2;
+ if (n < MAX_COLOR + 1) {
+ n = MAX_COLOR + 1;
+ }
if (cm->cd == cm->cdspace) {
newCd = (struct colordesc *) MALLOC(n * sizeof(struct colordesc));
if (newCd != NULL) {