Commit 381cdd7aa9c for php
commit 381cdd7aa9cebb78a076d9fdb6694d40b8b9242d
Author: Gina Peter Banyard <girgias@php.net>
Date: Sat Nov 29 14:46:25 2025 +0000
ext/standard/basic_functions.c: perform basic input checks for ip2long()
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index b8c488ae276..5313388d8fc 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -596,7 +596,12 @@ PHP_FUNCTION(ip2long)
Z_PARAM_PATH(addr, addr_len)
ZEND_PARSE_PARAMETERS_END();
- if (addr_len == 0 || inet_pton(AF_INET, addr, &ip) != 1) {
+ if (addr_len == 0) {
+ zend_argument_must_not_be_empty_error(1);
+ RETURN_THROWS();
+ }
+
+ if (inet_pton(AF_INET, addr, &ip) != 1) {
RETURN_FALSE;
}
#ifdef _AIX
diff --git a/ext/standard/tests/network/ip.phpt b/ext/standard/tests/network/ip.phpt
index b6ac49d5df6..6924befea3b 100644
--- a/ext/standard/tests/network/ip.phpt
+++ b/ext/standard/tests/network/ip.phpt
@@ -7,21 +7,20 @@
--FILE--
<?php
-$array = array(
+$array = [
"127.0.0.1",
"10.0.0.1",
"255.255.255.255",
"255.255.255.0",
"0.0.0.0",
"66.163.161.116",
-);
+];
foreach ($array as $ip) {
var_dump($long = ip2long($ip));
var_dump(long2ip($long));
}
-var_dump(ip2long(""));
var_dump(ip2long("777.777.777.777"));
var_dump(ip2long("111.111.111.111"));
@@ -43,7 +42,6 @@
int(1118019956)
string(14) "66.163.161.116"
bool(false)
-bool(false)
int(1869573999)
string(13) "255.254.82.80"
Done
diff --git a/ext/standard/tests/network/ip2long_errors.phpt b/ext/standard/tests/network/ip2long_errors.phpt
new file mode 100644
index 00000000000..dc39d3f9664
--- /dev/null
+++ b/ext/standard/tests/network/ip2long_errors.phpt
@@ -0,0 +1,20 @@
+--TEST--
+ip2long() error conditions
+--FILE--
+<?php
+
+try {
+ var_dump(ip2long(""));
+} catch (Throwable $e) {
+ echo $e::class, ': ', $e->getMessage(), PHP_EOL;
+}
+try {
+ var_dump(ip2long("127\00.0.1"));
+} catch (Throwable $e) {
+ echo $e::class, ': ', $e->getMessage(), PHP_EOL;
+}
+?>
+--EXPECT--
+ValueError: ip2long(): Argument #1 ($ip) must not be empty
+ValueError: ip2long(): Argument #1 ($ip) must not contain any null bytes
+
diff --git a/ext/standard/tests/network/ip_x86_64.phpt b/ext/standard/tests/network/ip_x86_64.phpt
index 16e855188aa..58df8086577 100644
--- a/ext/standard/tests/network/ip_x86_64.phpt
+++ b/ext/standard/tests/network/ip_x86_64.phpt
@@ -7,21 +7,19 @@
--FILE--
<?php
-$array = array(
+$array = [
"127.0.0.1",
"10.0.0.1",
"255.255.255.255",
"255.255.255.0",
"0.0.0.0",
"66.163.161.116",
-);
+];
foreach ($array as $ip) {
var_dump($long = ip2long($ip));
var_dump(long2ip($long));
}
-
-var_dump(ip2long(""));
var_dump(ip2long("777.777.777.777"));
var_dump(ip2long("111.111.111.111"));
@@ -45,7 +43,6 @@
int(1118019956)
string(14) "66.163.161.116"
bool(false)
-bool(false)
int(1869573999)
string(13) "255.254.82.80"
string(15) "255.255.255.255"