diff -ru net-snmp-5.2.rc3/agent/helpers/table_dataset.c net-snmp-5.2.rc3_fixed/agent/helpers/table_dataset.c
--- net-snmp-5.2.rc3/agent/helpers/table_dataset.c	2004-10-21 23:42:48 +0500
+++ net-snmp-5.2.rc3_fixed/agent/helpers/table_dataset.c	2004-12-01 19:25:11 +0400
@@ -347,9 +347,14 @@
 netsnmp_table_data_set_clone_row(netsnmp_table_row *row)
 {
     netsnmp_table_data_set_storage *data, **newrowdata;
-    netsnmp_table_row *newrow = netsnmp_table_data_clone_row(row);
+    netsnmp_table_row *newrow;
 
-    if (!row || !newrow)
+    if (!row)
+        return NULL;
+
+    newrow = netsnmp_table_data_clone_row(row);
+
+    if (!newrow)
         return NULL;
 
     data = (netsnmp_table_data_set_storage *) row->data;
@@ -361,12 +366,14 @@
 
             memdup((u_char **) newrowdata, (u_char *) data,
                    sizeof(netsnmp_table_data_set_storage));
+	    //BUG: must free memory allocated in this proc first
             if (!*newrowdata)
                 return NULL;
 
             if (data->data.voidp) {
                 memdup((u_char **) & ((*newrowdata)->data.voidp),
                        (u_char *) data->data.voidp, data->data_len);
+		//BUG: must free memory allocated in this proc first
                 if (!(*newrowdata)->data.voidp)
                     return NULL;
             }
@@ -747,6 +754,7 @@
                 if (newrowstash->deleted) {
                     netsnmp_table_dataset_remove_and_delete_row(datatable, newrow);
                 }
+		netsnmp_oid_stash_free(stashp,NULL);
             }
             break;
 
