From ca8a497dc04e9cf243a239a9927fefa713411cb2 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 3 Jan 2025 11:41:11 +0000 Subject: [PATCH] Fix GH-17330: SNMP::setSecurity segfaults when object had been closed. checking when the workflow needs to deal with an existing SNMP session. --- ext/snmp/snmp.c | 4 ++++ ext/snmp/tests/gh17330.phpt | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 ext/snmp/tests/gh17330.phpt diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 2e18d8e0128a6..b5bb9f91745c6 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1660,6 +1660,10 @@ PHP_METHOD(SNMP, setSecurity) zend_string *a1 = NULL, *a2 = NULL, *a3 = NULL, *a4 = NULL, *a5 = NULL, *a6 = NULL, *a7 = NULL; snmp_object = Z_SNMP_P(object); + if (!snmp_object->session) { + zend_throw_error(NULL, "Invalid or uninitialized SNMP object"); + RETURN_THROWS(); + } if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|SSSSSS", &a1, &a2, &a3, &a4,&a5, &a6, &a7) == FAILURE) { RETURN_THROWS(); diff --git a/ext/snmp/tests/gh17330.phpt b/ext/snmp/tests/gh17330.phpt new file mode 100644 index 0000000000000..a6f077a9c8600 --- /dev/null +++ b/ext/snmp/tests/gh17330.phpt @@ -0,0 +1,18 @@ +--TEST-- +SNMP::setSecurity() segfault when the object had been closed. +--EXTENSIONS-- +snmp +--CREDITS-- +YuanchengJiang +--FILE-- +close(); +try { + $session->setSecurity('authPriv', 'MD5', '', 'AES', ''); +} catch(Error $e) { + echo $e->getMessage(); +} +?> +--EXPECT-- +Invalid or uninitialized SNMP object