From cbb74733f7f5164774feb7b9dcb2dd1eca855b0d Mon Sep 17 00:00:00 2001 From: Rainer Jung Date: Tue, 28 Oct 2014 19:00:50 +0000 Subject: [PATCH] Merge r1631983 from trunk: mod_substitute: no real functional change, but: - define default for maximum line length indepenent of MAX_STRING_LEN - Clarify line length check with a comment - add supported 'b' suffix to directive description Submitted by: rjung Reviewed by: jim, ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1634948 13f79535-47bb-0310-9956-ffa450edef68 --- STATUS | 10 ---------- modules/filters/mod_substitute.c | 10 +++++++--- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/STATUS b/STATUS index b770311266..43c345951d 100644 --- a/STATUS +++ b/STATUS @@ -110,16 +110,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: 2.4.x patch: trunk patch works +1: jailletc36, rjung, ylavic - * mod_substitute: no real functional change, but: - - define default for maximum line length - indepenent of MAX_STRING_LEN - - Clarify line length check with a comment - - add supported 'b' suffix to directive - description - trunk patches: https://svn.apache.org/r1631983 - 2.4.x patch: trunk works, no CHANGES - +1: rjung, jim, ylavic - * style fix trunk patch: http://svn.apache.org/r1633031 http://svn.apache.org/r1633522 diff --git a/modules/filters/mod_substitute.c b/modules/filters/mod_substitute.c index c9de4fe949..9326348c52 100644 --- a/modules/filters/mod_substitute.c +++ b/modules/filters/mod_substitute.c @@ -38,7 +38,7 @@ * Therefore we limit the resulting length of the line. * This is the default value. */ -#define AP_SUBST_MAX_LINE_LENGTH (128*MAX_STRING_LEN) +#define AP_SUBST_MAX_LINE_LENGTH (1024*1024) static const char substitute_filter_name[] = "SUBSTITUTE"; @@ -243,9 +243,13 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb, apr_status_t rv; have_match = 1; if (script->flatten && !force_quick) { - /* copy bytes before the match */ + /* check remaining buffer size */ + /* Note that the last param in ap_varbuf_regsub below + * must stay positive. If it gets 0, it would mean + * unlimited space available. */ if (vb.strlen + regm[0].rm_so >= cfg->max_line_length) return APR_ENOMEM; + /* copy bytes before the match */ if (regm[0].rm_so > 0) ap_varbuf_strmemcat(&vb, pos, regm[0].rm_so); /* add replacement string, last argument is unsigned! */ @@ -672,7 +676,7 @@ static const char *set_max_line_length(cmd_parms *cmd, void *cfg, const char *ar if (rv != APR_SUCCESS || max < 0) { return "SubstituteMaxLineLength must be a non-negative integer optionally " - "suffixed with 'k', 'm' or 'g'."; + "suffixed with 'b', 'k', 'm' or 'g'."; } dcfg->max_line_length = (apr_size_t)max; dcfg->max_line_length_set = 1; -- 2.50.1