Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ PHP NEWS
file fails after it was already truncated. (Ilia Alshanetsky)

- Standard:
. Fixed URL rewriting dropping an explicit port 0. (Ilia Alshanetsky)
. Fixed chown() and lchown() failing to resolve user names in ZTS builds
when getpwnam_r() needs a larger buffer. (Ilia Alshanetsky)
. Fixed password_get_info() and password_needs_rehash() accepting malformed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
--TEST--
output_add_rewrite_var() preserves an explicit port zero
--INI--
url_rewriter.tags="a=href,form=action"
url_rewriter.hosts="php.net"
--FILE--
<?php
ob_start();
output_add_rewrite_var('key', 'value');
?>
<a href="http://php.net/path">no port</a>
<a href="http://php.net:0/path">zero port</a>
<a href="http://php.net:8080/path">nonzero port</a>
<form action="http://php.net/path" method="post">no port</form>
<form action="http://php.net:0/path" method="post">zero port</form>
<form action="http://php.net:8080/path" method="post">nonzero port</form>
<?php
ob_end_flush();
?>
--EXPECT--
<a href="http://php.net/path?key=value">no port</a>
<a href="http://php.net:0/path?key=value">zero port</a>
<a href="http://php.net:8080/path?key=value">nonzero port</a>
<form action="http://php.net/path?key=value" method="post"><input type="hidden" name="key" value="value" />no port</form>
<form action="http://php.net:0/path?key=value" method="post"><input type="hidden" name="key" value="value" />zero port</form>
<form action="http://php.net:8080/path?key=value" method="post"><input type="hidden" name="key" value="value" />nonzero port</form>
5 changes: 3 additions & 2 deletions ext/standard/url_scanner_ex.re
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,10 @@ alphadash = ([a-zA-Z] | "-");
static inline void append_modified_url(smart_str *url, smart_str *dest, smart_str *url_app, const char *separator, int type)
{
php_url *url_parts;
bool has_port;

smart_str_0(url); /* FIXME: Bug #70480 php_url_parse_ex() crashes by processing chars exceed len */
url_parts = php_url_parse_ex(ZSTR_VAL(url->s), ZSTR_LEN(url->s));
url_parts = php_url_parse_ex2(ZSTR_VAL(url->s), ZSTR_LEN(url->s), &has_port);

/* Ignore malformed URLs */
if (!url_parts) {
Expand Down Expand Up @@ -261,7 +262,7 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st
if (url_parts->host) {
smart_str_appends(dest, ZSTR_VAL(url_parts->host));
}
if (url_parts->port) {
if (has_port) {
smart_str_appendc(dest, ':');
smart_str_append_unsigned(dest, (long)url_parts->port);
}
Expand Down
Loading