From edde934ede6f0d0f17c4e65f4c59ab06b7d43751 Mon Sep 17 00:00:00 2001 From: James Titcumb Date: Tue, 5 Nov 2019 15:57:29 +0000 Subject: [PATCH] Fixes segfault that happens when arguments are looped over too high --- package.xml | 33 +++++++++++++++++++++++++-------- tests/bug-47.phpt | 20 ++++++++++++++++++++ zend_scoutapm.c | 2 +- 3 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 tests/bug-47.phpt diff --git a/tests/bug-47.phpt b/tests/bug-47.phpt new file mode 100644 index 0000000..e15d34d --- /dev/null +++ b/tests/bug-47.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug https://github.com/scoutapp/scout-apm-php-ext/issues/47 - fix segfault when accessing argument store out of bounds +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Notice: fwrite(): ScoutAPM could not determine arguments for this call in %s +array(2) { + [0]=> + resource(%d) of type (%s) + [1]=> + string(%d) "fread/fwrite test" +} diff --git a/zend_scoutapm.c b/zend_scoutapm.c index 98058fe..8d29a08 100644 --- a/zend_scoutapm.c +++ b/zend_scoutapm.c @@ -346,7 +346,7 @@ void record_arguments_for_call(const char *call_reference, int argc, zval *argv) zend_long find_index_for_recorded_arguments(const char *call_reference) { zend_long i = 0; - for (; i <= SCOUTAPM_G(disconnected_call_argument_store_count); i++) { + for (; i < SCOUTAPM_G(disconnected_call_argument_store_count); i++) { if (SCOUTAPM_G(disconnected_call_argument_store)[i].reference && strcasecmp( SCOUTAPM_G(disconnected_call_argument_store)[i].reference,