[rrd-developers] [PATCH] rrd_update: fix memory leak during CDEF processing
Frederik Kriewitz
frederik at kriewitz.eu
Wed Apr 28 14:56:18 CEST 2010
I think rpnp in process_pdp_st (allocated in rpn_expand) in is never freed.
Index: src/rrd_update.c
===================================================================
--- src/rrd_update.c (revision 2072)
+++ src/rrd_update.c (working copy)
@@ -1354,6 +1354,10 @@
rpnp =
rpn_expand((rpn_cdefds_t *) &(rrd->ds_def[ds_idx].par[DS_cdef]));
+ if(rpnp == NULL) {
+ rpnstack_free(&rpnstack);
+ return -1;
+ }
/* substitute data values for OP_VARIABLE nodes */
for (i = 0; rpnp[i].op != OP_END; i++) {
if (rpnp[i].op == OP_VARIABLE) {
@@ -1367,6 +1371,7 @@
rpnstack_free(&rpnstack);
return -1;
}
+ free(rpnp);
}
/* make pdp_prep ready for the next run */
Index: src/rrd_rpncalc.c
===================================================================
--- src/rrd_rpncalc.c (revision 2072)
+++ src/rrd_rpncalc.c (working copy)
@@ -72,8 +72,10 @@
/* DS_CDEF_MAX_RPN_NODES is small, so at the expense of some wasted
* memory we avoid any reallocs */
rpnp = (rpnp_t *) calloc(DS_CDEF_MAX_RPN_NODES, sizeof(rpnp_t));
- if (rpnp == NULL)
+ if (rpnp == NULL) {
+ rrd_set_error("failed allocating rpnp array");
return NULL;
+ }
for (i = 0; rpnc[i].op != OP_END; ++i) {
rpnp[i].op = rpnc[i].op;
if (rpnp[i].op == OP_NUMBER) {
More information about the rrd-developers
mailing list