From 666073519759813e3d23f9b5d2d0ab89be388958 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 21 Aug 2026 06:40:42 +0200 Subject: [PATCH 1/3] Drop ZEND_LTOA usage . ZEND_LTOA() (and ZEND_LTOA_BUF_LEN) has been removed, as it was unsafe. Directly use ZEND_LONG_FMT with a function from the printf family. --- rrd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rrd.c b/rrd.c index ff51776..54f5b95 100644 --- a/rrd.c +++ b/rrd.c @@ -124,8 +124,8 @@ PHP_FUNCTION(rrd_fetch) /* pointer for one data source retrieved data */ zval *ds_data_array; /* value for key (timestamp) in data array */ - char str_timestamp[11]; - ZEND_LTOA((zend_ulong)timestamp, str_timestamp, sizeof(str_timestamp)); + char str_timestamp[65]; + snprintf(str_timestamp, sizeof(str_timestamp), ZEND_ULONG_FMT, (zend_ulong)timestamp); /* gets pointer for data source result array */ ds_data_array = zend_hash_get_current_data(Z_ARRVAL(zv_data_array)); @@ -463,8 +463,8 @@ PHP_FUNCTION(rrd_xport) data_ptr = data + outvar_index; for (time_index = start + step; time_index <= end; time_index += step) { /* value for key (timestamp) in data array */ - char str_timestamp[11]; - ZEND_LTOA((zend_ulong)time_index, str_timestamp, sizeof(str_timestamp)); + char str_timestamp[65]; + snprintf(str_timestamp, sizeof(str_timestamp), ZEND_ULONG_FMT, (zend_ulong)time_index); add_assoc_double(&time_data, str_timestamp, *data_ptr); data_ptr += outvar_count; From 854f49ad5df4962d17377fbc2c0c28c4853e917c Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 21 Aug 2026 06:42:11 +0200 Subject: [PATCH 2/3] Drop zval_dtor usage . The zval_dtor() alias of zval_ptr_dtor_nogc() has been removed. Call zval_ptr_dtor_nogc() directly instead. --- rrd.c | 4 ++-- rrd_create.c | 12 ++++++------ rrd_graph.c | 6 +++--- rrd_update.c | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/rrd.c b/rrd.c index 54f5b95..568f02d 100644 --- a/rrd.c +++ b/rrd.c @@ -334,7 +334,7 @@ PHP_FUNCTION(rrd_restore) argv = rrd_args_init_by_phparray("restore", xml_filename, &zv_options); if (!argv) { zend_error(E_WARNING, "cannot allocate arguments options"); - zval_dtor(&zv_options); + zval_ptr_dtor_nogc(&zv_options); RETURN_FALSE; } @@ -346,7 +346,7 @@ PHP_FUNCTION(rrd_restore) } else { RETVAL_TRUE; } - zval_dtor(&zv_options); + zval_ptr_dtor_nogc(&zv_options); rrd_args_free(argv); } /* }}} */ diff --git a/rrd_create.c b/rrd_create.c index 94cf16b..cbf1ff8 100644 --- a/rrd_create.c +++ b/rrd_create.c @@ -63,11 +63,11 @@ static void rrd_create_object_dtor(zend_object *object) if (intern_obj->start_time) efree(intern_obj->start_time); if (!Z_ISUNDEF(intern_obj->zv_step)) - zval_dtor(&intern_obj->zv_step); + zval_ptr_dtor_nogc(&intern_obj->zv_step); if (!Z_ISUNDEF(intern_obj->zv_arr_data_sources)) - zval_dtor(&intern_obj->zv_arr_data_sources); + zval_ptr_dtor_nogc(&intern_obj->zv_arr_data_sources); if (!Z_ISUNDEF(intern_obj->zv_arr_archives)) - zval_dtor(&intern_obj->zv_arr_archives); + zval_ptr_dtor_nogc(&intern_obj->zv_arr_archives); zend_object_std_dtor(&intern_obj->std); } @@ -255,7 +255,7 @@ PHP_METHOD(RRDCreator, save) create_argv = rrd_args_init_by_phparray("create", intern_obj->file_path, &zv_create_argv); if (!create_argv) { zend_error(E_WARNING, "cannot allocate arguments options"); - zval_dtor(&zv_create_argv); + zval_ptr_dtor_nogc(&zv_create_argv); RETURN_FALSE; } @@ -263,7 +263,7 @@ PHP_METHOD(RRDCreator, save) /* call rrd_create and test if fails */ if (rrd_create(create_argv->count - 1, &create_argv->args[1]) == -1) { - zval_dtor(&zv_create_argv); + zval_ptr_dtor_nogc(&zv_create_argv); rrd_args_free(create_argv); /* throw exception with rrd error string */ @@ -272,7 +272,7 @@ PHP_METHOD(RRDCreator, save) return; } - zval_dtor(&zv_create_argv); + zval_ptr_dtor_nogc(&zv_create_argv); rrd_args_free(create_argv); RETURN_TRUE; } diff --git a/rrd_graph.c b/rrd_graph.c index 0e43550..ad186ed 100644 --- a/rrd_graph.c +++ b/rrd_graph.c @@ -60,7 +60,7 @@ static void rrd_graph_object_dtor(zend_object *object) efree(intern_obj->file_path); } if (!Z_ISUNDEF(intern_obj->zv_arr_options)) { - zval_dtor(&intern_obj->zv_arr_options); + zval_ptr_dtor_nogc(&intern_obj->zv_arr_options); } zend_object_std_dtor(&intern_obj->std); @@ -120,7 +120,7 @@ PHP_METHOD(RRDGraph, setOptions) /* if our array is initialized, so delete it first */ if (!Z_ISUNDEF(intern_obj->zv_arr_options)) { - zval_dtor(&intern_obj->zv_arr_options); + zval_ptr_dtor_nogc(&intern_obj->zv_arr_options); } /* copy array from parameter */ @@ -169,7 +169,7 @@ static rrd_args *rrd_graph_obj_create_argv(const char *command_name, const rrd_g } ZEND_HASH_FOREACH_END(); result = rrd_args_init_by_phparray(command_name, obj->file_path, &zv_argv); - zval_dtor(&zv_argv); + zval_ptr_dtor_nogc(&zv_argv); return result; } diff --git a/rrd_update.c b/rrd_update.c index e21c778..098ad89 100644 --- a/rrd_update.c +++ b/rrd_update.c @@ -179,7 +179,7 @@ PHP_METHOD(RRDUpdater, update) update_argv = rrd_args_init_by_phparray("update", intern_obj->file_path, &zv_update_argv); if (!update_argv) { zend_error(E_WARNING, "cannot allocate arguments options"); - zval_dtor(&zv_update_argv); + zval_ptr_dtor_nogc(&zv_update_argv); if (time_str_length == 0) efree(time); RETURN_FALSE; } @@ -188,7 +188,7 @@ PHP_METHOD(RRDUpdater, update) /* call rrd_update and test if fails */ if (rrd_update(update_argv->count - 1, &update_argv->args[1]) == -1) { - zval_dtor(&zv_update_argv); + zval_ptr_dtor_nogc(&zv_update_argv); rrd_args_free(update_argv); /* throw exception with rrd error string */ @@ -197,7 +197,7 @@ PHP_METHOD(RRDUpdater, update) return; } - zval_dtor(&zv_update_argv); + zval_ptr_dtor_nogc(&zv_update_argv); rrd_args_free(update_argv); RETURN_TRUE; From d2b13dc2deb95cea3ad1c69ed409742d801ac8ac Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Fri, 21 Aug 2026 06:45:03 +0200 Subject: [PATCH 3/3] Drop XtOffsetOf usage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit . The XtOffsetOf() alias of C’s offsetof() macro has been removed. Use offsetof() directly. --- rrd_create.c | 4 ++-- rrd_graph.c | 4 ++-- rrd_update.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rrd_create.c b/rrd_create.c index cbf1ff8..75eeeba 100644 --- a/rrd_create.c +++ b/rrd_create.c @@ -47,7 +47,7 @@ typedef struct _rrd_create_object { * fetch our custom object from user space object */ static inline rrd_create_object *php_rrd_create_fetch_object(zend_object *obj) { - return (rrd_create_object *)((char*)(obj) - XtOffsetOf(rrd_create_object, std)); + return (rrd_create_object *)((char*)(obj) - offsetof(rrd_create_object, std)); } /* {{{ rrd_create_object_dtor @@ -345,6 +345,6 @@ void rrd_create_minit() memcpy(&rrd_create_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); rrd_create_handlers.clone_obj = NULL; - rrd_create_handlers.offset = XtOffsetOf(rrd_create_object, std); + rrd_create_handlers.offset = offsetof(rrd_create_object, std); rrd_create_handlers.free_obj = rrd_create_object_dtor; } diff --git a/rrd_graph.c b/rrd_graph.c index ad186ed..a338136 100644 --- a/rrd_graph.c +++ b/rrd_graph.c @@ -45,7 +45,7 @@ typedef struct _rrd_graph_object { * fetch our custom object from user space object */ static inline rrd_graph_object *php_rrd_graph_fetch_object(zend_object *obj) { - return (rrd_graph_object *)((char*)(obj) - XtOffsetOf(rrd_graph_object, std)); + return (rrd_graph_object *)((char*)(obj) - offsetof(rrd_graph_object, std)); } /* {{{ rrd_graph_object_dtor @@ -391,6 +391,6 @@ void rrd_graph_minit() memcpy(&rrd_graph_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); rrd_graph_handlers.clone_obj = NULL; - rrd_graph_handlers.offset = XtOffsetOf(rrd_graph_object, std); + rrd_graph_handlers.offset = offsetof(rrd_graph_object, std); rrd_graph_handlers.free_obj = rrd_graph_object_dtor; } diff --git a/rrd_update.c b/rrd_update.c index 098ad89..c13c11d 100644 --- a/rrd_update.c +++ b/rrd_update.c @@ -44,7 +44,7 @@ typedef struct _rrd_update_object { * fetch our custom object from user space object */ static inline rrd_update_object *php_rrd_update_fetch_object(zend_object *obj) { - return (rrd_update_object *)((char*)(obj) - XtOffsetOf(rrd_update_object, std)); + return (rrd_update_object *)((char*)(obj) - offsetof(rrd_update_object, std)); } /* {{{ rrd_update_object_dtor @@ -265,6 +265,6 @@ void rrd_update_minit() memcpy(&rrd_update_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); rrd_update_handlers.clone_obj = NULL; - rrd_update_handlers.offset = XtOffsetOf(rrd_update_object, std); + rrd_update_handlers.offset = offsetof(rrd_update_object, std); rrd_update_handlers.free_obj = rrd_update_object_dtor; }