diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c index ca8e65c1f75f6..7ac64444fa7f9 100644 --- a/ext/filter/logical_filters.c +++ b/ext/filter/logical_filters.c @@ -542,7 +542,7 @@ static int _php_filter_validate_domain(char * domain, size_t len, zend_long flag /* Reset label length counter */ i = 1; } else { - if (i > 63 || (hostname && *s != '-' && !isalnum((int)*(unsigned char *)s))) { + if (i > 63 || (hostname && (*s != '-' || *(s + 1) == '\0') && !isalnum((int)*(unsigned char *)s))) { return 0; } diff --git a/ext/filter/tests/gh16523.phpt b/ext/filter/tests/gh16523.phpt new file mode 100644 index 0000000000000..b2985c12a7827 --- /dev/null +++ b/ext/filter/tests/gh16523.phpt @@ -0,0 +1,20 @@ +--TEST-- +GH-16523 (FILTER_FLAG_HOSTNAME accepts ending hyphen) +--EXTENSIONS-- +filter +--FILE-- + +--EXPECT-- +bool(false) +bool(false) +bool(false)