summaryrefslogtreecommitdiff
path: root/libjack
diff options
context:
space:
mode:
authorrncbc <rncbc@gamma.rncbc.lan>2015-04-19 11:57:44 +0100
committerrncbc <rncbc@gamma.rncbc.lan>2015-05-01 12:24:35 +0100
commit6816710adc72bd22f8968e2627459d142f72ce66 (patch)
treef84e5bcf745c4f5f3183e26cc03a90a33dbec340 /libjack
parent4f0fe014fb05a322f5cd56e718f2929df365b642 (diff)
downloadjack1-6816710adc72bd22f8968e2627459d142f72ce66.tar.gz
[metadata] fix unfreed DBT key/data tuples causing several mem-leaks.
Diffstat (limited to 'libjack')
-rw-r--r--libjack/metadata.c63
1 files changed, 33 insertions, 30 deletions
diff --git a/libjack/metadata.c b/libjack/metadata.c
index fe912a1..a12778f 100644
--- a/libjack/metadata.c
+++ b/libjack/metadata.c
@@ -209,11 +209,16 @@ jack_set_property (jack_client_t* client,
char ustr[JACK_UUID_STRING_SIZE];
jack_uuid_unparse (subject, ustr);
jack_error ("Cannot store metadata for %s/%s (%s)", ustr, key, db_strerror (ret));
+ if (d_key.size > 0) free(d_key.data);
+ if (data.size > 0) free(data.data);
return -1;
}
jack_property_change_notify (client, subject, key, change);
+ if (d_key.size > 0) free(d_key.data);
+ if (data.size > 0) free(data.data);
+
return 0;
}
@@ -251,6 +256,8 @@ jack_get_property (jack_uuid_t subject,
jack_uuid_unparse (subject, ustr);
jack_error ("Cannot metadata for %s/%s (%s)", ustr, key, db_strerror (ret));
}
+ if (d_key.size > 0) free(d_key.data);
+ if (data.size > 0) free(data.data);
return -1;
}
@@ -258,9 +265,8 @@ jack_get_property (jack_uuid_t subject,
*/
if (data.size < 4) {
- if (data.size > 0) {
- free (data.data);
- }
+ if (d_key.size > 0) free(d_key.data);
+ if (data.size > 0) free(data.data);
return -1;
}
@@ -278,9 +284,8 @@ jack_get_property (jack_uuid_t subject,
*type = NULL;
}
- if (data.size) {
- free (data.data);
- }
+ if (d_key.size > 0) free(d_key.data);
+ if (data.size > 0) free(data.data);
return 0;
}
@@ -326,17 +331,15 @@ jack_get_properties (jack_uuid_t subject,
*/
if (key.size < JACK_UUID_STRING_SIZE + 2) {
- if (data.size > 0) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
continue;
}
if (memcmp (ustr, key.data, JACK_UUID_STRING_SIZE) != 0) {
/* not relevant */
- if (data.size > 0) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
continue;
}
@@ -344,9 +347,8 @@ jack_get_properties (jack_uuid_t subject,
*/
if (data.size < 4) {
- if (data.size > 0) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
continue;
}
@@ -392,9 +394,8 @@ jack_get_properties (jack_uuid_t subject,
prop->type = NULL;
}
- if (data.size) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
++cnt;
}
@@ -445,9 +446,8 @@ jack_get_all_properties (jack_description_t** descriptions)
*/
if (key.size < JACK_UUID_STRING_SIZE + 2) {
- if (data.size > 0) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
continue;
}
@@ -524,9 +524,8 @@ jack_get_all_properties (jack_description_t** descriptions)
current_prop->type = NULL;
}
- if (data.size) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
}
cursor->close (cursor);
@@ -577,11 +576,14 @@ jack_remove_property (jack_client_t* client, jack_uuid_t subject, const char* ke
make_key_dbt (&d_key, subject, key);
if ((ret = db->del (db, NULL, &d_key, 0)) != 0) {
jack_error ("Cannot delete key %s (%s)", key, db_strerror (ret));
+ if (d_key.size > 0) free(d_key.data);
return -1;
}
jack_property_change_notify (client, subject, key, PropertyDeleted);
+ if (d_key.size > 0) free(d_key.data);
+
return 0;
}
@@ -619,17 +621,15 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject)
*/
if (key.size < JACK_UUID_STRING_SIZE + 2) {
- if (data.size > 0) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
continue;
}
if (memcmp (ustr, key.data, JACK_UUID_STRING_SIZE) != 0) {
/* not relevant */
- if (data.size > 0) {
- free (data.data);
- }
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
continue;
}
@@ -641,6 +641,9 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject)
retval = -1;
}
cnt++;
+
+ /* if (key.size > 0) free(key.data); */
+ if (data.size > 0) free(data.data);
}
cursor->close (cursor);