diff options
author | dgp <dgp@users.sourceforge.net> | 2013-04-08 19:59:03 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2013-04-08 19:59:03 (GMT) |
commit | b33c30f98bfe09a38ef7a2106610e2d0d0605a45 (patch) | |
tree | 66cc82c126d9de0e6ce6bc9579d76026b029826b /generic/regc_color.c | |
parent | ba5ae0ab74c4217f0a951b0eb3edf223022af5c5 (diff) | |
parent | e62eab9118e1460d3afe28e01dc2b83bbb63194c (diff) | |
download | tcl-b33c30f98bfe09a38ef7a2106610e2d0d0605a45.zip tcl-b33c30f98bfe09a38ef7a2106610e2d0d0605a45.tar.gz tcl-b33c30f98bfe09a38ef7a2106610e2d0d0605a45.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.c | 7 |
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) { |