(httpd-tests) branch trunk updated: mod_proxy_html: add more test cases
[email protected] Fri, 05 Jun 2026 11:50:41 +0000
| Newsgroups | gmane.comp.apache.cvs |
|---|---|
| Message-ID | <178066024156.744168.15614528089970140843@gitbox3-he-fi.apache.org> |
This is an automated email from the ASF dual-hosted git repository.
notroj pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/httpd-tests.git
The following commit(s) were added to refs/heads/trunk by this push:
new c96b599f mod_proxy_html: add more test cases
c96b599f is described below
commit c96b599f9da2a53170f5d9886e1113680ca14c43
Author: Joe Orton <[email protected]>
AuthorDate: Fri Jun 5 12:42:48 2026 +0100
mod_proxy_html: add more test cases
Assisted-By: Claude Sonnet 4.5 <[email protected]>
---
t/conf/proxy.conf.in | 22 ++++++++++++++++++++++
t/htdocs/modules/proxy_html/multi_subst.html | 20 ++++++++++++++++++++
t/htdocs/modules/proxy_html/multi_subst_rx.html | 20 ++++++++++++++++++++
t/modules/proxy_html.t | 24 ++++++++++++++++++++++++
4 files changed, 86 insertions(+)
diff --git a/t/conf/proxy.conf.in b/t/conf/proxy.conf.in
index 37c76e65..5924d89c 100644
--- a/t/conf/proxy.conf.in
+++ b/t/conf/proxy.conf.in
@@ -338,6 +338,28 @@ Alias /modules/proxy/fcgi-uds-sethandler @SERVERROOT@/htdocs/modules/proxy/fcgi
ProxyPass http://@SERVERNAME@:@PORT@/modules/proxy_html
</Location>
+ # Multi-substitution buffer reallocation test
+ <Location /modules/html_proxy/multi_subst>
+ ProxyHTMLEnable on
+ ProxyHTMLExtended on
+ ProxyHTMLLinks a href
+ ProxyHTMLEvents onclick
+ ProxyHTMLBufSize 256
+ ProxyHTMLURLMap http://x/ http://long-rewritten-path.example.com/
+ ProxyPass http://@SERVERNAME@:@PORT@/modules/proxy_html
+ </Location>
+
+ # Multi-substitution regex buffer test
+ <Location /modules/html_proxy/multi_subst_rx>
+ ProxyHTMLEnable on
+ ProxyHTMLExtended on
+ ProxyHTMLLinks a href
+ ProxyHTMLEvents onclick
+ ProxyHTMLBufSize 256
+ ProxyHTMLURLMap "http://rx/" "http://regex-rewritten-path.example.com/" R
+ ProxyPass http://@SERVERNAME@:@PORT@/modules/proxy_html
+ </Location>
+
# Multiple URL maps test
<Location /modules/html_proxy/multiple_maps>
ProxyHTMLEnable on
diff --git a/t/htdocs/modules/proxy_html/multi_subst.html b/t/htdocs/modules/proxy_html/multi_subst.html
new file mode 100644
index 00000000..0598dba5
--- /dev/null
+++ b/t/htdocs/modules/proxy_html/multi_subst.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head><title>Multi-substitution buffer test</title></head>
+<body>
+<script>
+var u01='http://x/u01';var u02='http://x/u02';var u03='http://x/u03';var u04='http://x/u04';var u05='http://x/u05';var u06='http://x/u06';var u07='http://x/u07';var u08='http://x/u08';var u09='http://x/u09';var u10='http://x/u10';var u11='http://x/u11';var u12='http://x/u12';var u13='http://x/u13';var u14='http://x/u14';var u15='http://x/u15';var u16='http://x/u16';var u17='http://x/u17';var u18='http://x/u18';var u19='http://x/u19';var u20='http://x/u20';var u21='http://x/u21';var u22=' [...]
+</script>
+<a href="#" onclick="f('http://x/v01','http://x/v02','http://x/v03','http://x/v04','http://x/v05','http://x/v06','http://x/v07','http://x/v08','http://x/v09','http://x/v10','http://x/v11','http://x/v12','http://x/v13','http://x/v14','http://x/v15','http://x/v16','http://x/v17','http://x/v18','http://x/v19','http://x/v20','http://x/v21','http://x/v22','http://x/v23','http://x/v24','http://x/v25','http://x/v26','http://x/v27','http://x/v28','http://x/v29','http://x/v30','http://x/v31','htt [...]
+</body>
+</html>
+<!DOCTYPE html>
+<html>
+<head><title>Multi-substitution buffer test</title></head>
+<body>
+<script>
+var u01='http://x/u01';var u02='http://x/u02';var u03='http://x/u03';var u04='http://x/u04';var u05='http://x/u05';var u06='http://x/u06';var u07='http://x/u07';var u08='http://x/u08';var u09='http://x/u09';var u10='http://x/u10';var u11='http://x/u11';var u12='http://x/u12';var u13='http://x/u13';var u14='http://x/u14';var u15='http://x/u15';var u16='http://x/u16';var u17='http://x/u17';var u18='http://x/u18';var u19='http://x/u19';var u20='http://x/u20';var u21='http://x/u21';var u22=' [...]
+</script>
+<a href="#" onclick="f('http://x/v01','http://x/v02','http://x/v03','http://x/v04','http://x/v05','http://x/v06','http://x/v07','http://x/v08','http://x/v09','http://x/v10','http://x/v11','http://x/v12','http://x/v13','http://x/v14','http://x/v15','http://x/v16','http://x/v17','http://x/v18','http://x/v19','http://x/v20','http://x/v21','http://x/v22','http://x/v23','http://x/v24','http://x/v25','http://x/v26','http://x/v27','http://x/v28','http://x/v29','http://x/v30','http://x/v31','htt [...]
+</body>
+</html>
diff --git a/t/htdocs/modules/proxy_html/multi_subst_rx.html b/t/htdocs/modules/proxy_html/multi_subst_rx.html
new file mode 100644
index 00000000..1d838df1
--- /dev/null
+++ b/t/htdocs/modules/proxy_html/multi_subst_rx.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head><title>Multi-substitution regex buffer test</title></head>
+<body>
+<script>
+var u01='http://rx/u01';var u02='http://rx/u02';var u03='http://rx/u03';var u04='http://rx/u04';var u05='http://rx/u05';var u06='http://rx/u06';var u07='http://rx/u07';var u08='http://rx/u08';var u09='http://rx/u09';var u10='http://rx/u10';var u11='http://rx/u11';var u12='http://rx/u12';var u13='http://rx/u13';var u14='http://rx/u14';var u15='http://rx/u15';var u16='http://rx/u16';var u17='http://rx/u17';var u18='http://rx/u18';var u19='http://rx/u19';var u20='http://rx/u20';var u21='htt [...]
+</script>
+<a href="#" onclick="f('http://rx/v01','http://rx/v02','http://rx/v03','http://rx/v04','http://rx/v05','http://rx/v06','http://rx/v07','http://rx/v08','http://rx/v09','http://rx/v10','http://rx/v11','http://rx/v12','http://rx/v13','http://rx/v14','http://rx/v15','http://rx/v16','http://rx/v17','http://rx/v18','http://rx/v19','http://rx/v20','http://rx/v21','http://rx/v22','http://rx/v23','http://rx/v24','http://rx/v25','http://rx/v26','http://rx/v27','http://rx/v28','http://rx/v29','http [...]
+</body>
+</html>
+<!DOCTYPE html>
+<html>
+<head><title>Multi-substitution regex buffer test</title></head>
+<body>
+<script>
+var u01='http://rx/u01';var u02='http://rx/u02';var u03='http://rx/u03';var u04='http://rx/u04';var u05='http://rx/u05';var u06='http://rx/u06';var u07='http://rx/u07';var u08='http://rx/u08';var u09='http://rx/u09';var u10='http://rx/u10';var u11='http://rx/u11';var u12='http://rx/u12';var u13='http://rx/u13';var u14='http://rx/u14';var u15='http://rx/u15';var u16='http://rx/u16';var u17='http://rx/u17';var u18='http://rx/u18';var u19='http://rx/u19';var u20='http://rx/u20';var u21='htt [...]
+</script>
+<a href="#" onclick="f('http://rx/v01','http://rx/v02','http://rx/v03','http://rx/v04','http://rx/v05','http://rx/v06','http://rx/v07','http://rx/v08','http://rx/v09','http://rx/v10','http://rx/v11','http://rx/v12','http://rx/v13','http://rx/v14','http://rx/v15','http://rx/v16','http://rx/v17','http://rx/v18','http://rx/v19','http://rx/v20','http://rx/v21','http://rx/v22','http://rx/v23','http://rx/v24','http://rx/v25','http://rx/v26','http://rx/v27','http://rx/v28','http://rx/v29','http [...]
+</body>
+</html>
diff --git a/t/modules/proxy_html.t b/t/modules/proxy_html.t
index e57d8ad9..4212ebc8 100644
--- a/t/modules/proxy_html.t
+++ b/t/modules/proxy_html.t
@@ -132,6 +132,30 @@ my @tests = (
{ type => 'url_rewrite', path => 'doctype/doctype.html',
pattern => '<!DOCTYPE html', desc => 'DOCTYPE declaration added' },
+ # Multi-substitution buffer reallocation tests
+ # Tests that many literal substitutions (where replacement > match) in a
+ # single buffer don't truncate content when ap_varbuf_grow reallocates.
+ { type => 'url_rewrite', path => 'multi_subst/multi_subst.html',
+ pattern => 'http://long-rewritten-path\\.example\\.com/u01', desc => 'CDATA multi-subst first URL rewritten' },
+ { type => 'url_rewrite', path => 'multi_subst/multi_subst.html',
+ pattern => 'http://long-rewritten-path\\.example\\.com/u40', desc => 'CDATA multi-subst last URL rewritten' },
+ { type => 'url_rewrite', path => 'multi_subst/multi_subst.html',
+ pattern => 'CDATA_END_OK', desc => 'CDATA content preserved after multi-substitution' },
+ { type => 'url_rewrite', path => 'multi_subst/multi_subst.html',
+ pattern => 'EVENT_END_OK', desc => 'event attr preserved after multi-substitution' },
+
+ # Multi-substitution regex buffer tests
+ # Tests that many regex substitutions in a single CDATA/event buffer
+ # don't cause heap overflow or content truncation.
+ { type => 'url_rewrite', path => 'multi_subst_rx/multi_subst_rx.html',
+ pattern => 'http://regex-rewritten-path\\.example\\.com/u01', desc => 'CDATA regex multi-subst first URL rewritten' },
+ { type => 'url_rewrite', path => 'multi_subst_rx/multi_subst_rx.html',
+ pattern => 'http://regex-rewritten-path\\.example\\.com/u40', desc => 'CDATA regex multi-subst last URL rewritten' },
+ { type => 'url_rewrite', path => 'multi_subst_rx/multi_subst_rx.html',
+ pattern => 'RX_CDATA_END_OK', desc => 'CDATA content preserved after regex multi-substitution' },
+ { type => 'url_rewrite', path => 'multi_subst_rx/multi_subst_rx.html',
+ pattern => 'RX_EVENT_END_OK', desc => 'event attr preserved after regex multi-substitution' },
+
# Multiple URL maps tests
{ type => 'url_rewrite', path => 'multiple_maps/multiple_maps.html',
pattern => 'http://new-a\\.example\\.com/page1\\.html', desc => 'first URL map' },