diff --git a/NEWS b/NEWS index 988094dd105..b3ba4bce032 100644 --- a/NEWS +++ b/NEWS @@ -74,6 +74,10 @@ PHP NEWS . Fixed bug GH-15837 (Segmentation fault in ext/simplexml/simplexml.c). (nielsdos) +- Sockets: + . Fixed bug GH-16267 (socket_strerror overflow on errno argument). + (David Carlier) + - SOAP: . Fixed bug #73182 (PHP SOAPClient does not support stream context HTTP headers in array form). (nielsdos) diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 29d6663bb44..890baa0cb01 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -1215,6 +1215,11 @@ PHP_FUNCTION(socket_strerror) RETURN_THROWS(); } + if (ZEND_LONG_EXCEEDS_INT(arg1)) { + zend_argument_value_error(1, "must be between %d and %d", INT_MIN, INT_MAX); + RETURN_THROWS(); + } + RETURN_STRING(sockets_strerror(arg1)); } /* }}} */ diff --git a/ext/sockets/tests/gh16267.phpt b/ext/sockets/tests/gh16267.phpt new file mode 100644 index 00000000000..d2462b31645 --- /dev/null +++ b/ext/sockets/tests/gh16267.phpt @@ -0,0 +1,22 @@ +--TEST-- +GH-16267 - overflow on socket_strerror argument +--EXTENSIONS-- +sockets +--SKIPIF-- + +--FILE-- +getMessage() . PHP_EOL; +} +try { + socket_strerror(PHP_INT_MAX); +} catch (\ValueError $e) { + echo $e->getMessage() . PHP_EOL; +} +?> +--EXPECTF-- +socket_strerror(): Argument #1 ($error_code) must be between %s and %s +socket_strerror(): Argument #1 ($error_code) must be between %s and %s