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 | 55102c2b83a91074eb32c07fb5930ccc9ca00c44 (patch) | |
tree | 66cc82c126d9de0e6ce6bc9579d76026b029826b /generic/regc_color.c | |
parent | e0dbb5bd6286d83d5bffb1ee2890569951dce5d4 (diff) | |
parent | 7ff52157edb4f8563b115be8ef48d116e3730e0d (diff) | |
download | tcl-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.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) { |