From e586d0df139def91f7f55ca580b22ad29ca75e6c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 14 Jan 2015 02:24:38 +0100 Subject: [PATCH 1/9] support [unescaped] double-quotes in jackdrc allow autostart of jackd on OSX where device-names can contain spaces. --- libjack/client.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/libjack/client.c b/libjack/client.c index 0b279e7..11f6a9a 100644 --- a/libjack/client.c +++ b/libjack/client.c @@ -932,17 +932,33 @@ _start_server (const char *server_name) } } - result = strcspn(arguments+pos, " "); - if (result == 0) { + /* skip whitespace */ + while (pos < strlen(arguments) && arguments[pos] && arguments[pos] == ' ') { + ++pos; + } + + if (pos >= strlen(arguments)) { break; } - argv[i] = (char*)malloc(result+1); - strncpy(argv[i], arguments+pos, result); - argv[i][result] = '\0'; + if (arguments[pos] == '\"') { + ++pos; + result = strcspn(arguments + pos, "\""); + } else { + result = strcspn(arguments + pos, " "); + } - pos += result+1; - ++i; + if (0 == result) { + break; + } + + argv[i] = (char*)malloc(result + 1); + strncpy(argv[i], arguments + pos, result); + argv[i][result] = '\0'; + pos += result + 1; + if (++i > 253) { + break; + } } argv[i] = 0; From 3befc4ff610d3cfb61947118710d1fd862520b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominic=20Sacr=C3=A9?= Date: Fri, 16 Jan 2015 14:18:54 +0100 Subject: [PATCH 2/9] fix segfault caused by incorrect jack_error() format string --- jackd/engine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackd/engine.c b/jackd/engine.c index 2d634e5..0fff48c 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -812,7 +812,7 @@ jack_process_external(jack_engine_t *engine, JSList *node) != sizeof (c)) { if (errno == EAGAIN) { jack_error ("pp: cannot clean up byte from graph wait " - "fd (%s) - no data present"); + "fd - no data present"); } else { jack_error ("pp: cannot clean up byte from graph wait " "fd (%s)", strerror (errno)); From 0abd99b2d1278373d958300d2575f5964e161acb Mon Sep 17 00:00:00 2001 From: rncbc Date: Sun, 19 Apr 2015 11:57:44 +0100 Subject: [PATCH 3/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. --- libjack/metadata.c | 63 ++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index fe912a1..a4e8969 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); From 57c2bc1d4a2559e2d462e394ba06dd827740f874 Mon Sep 17 00:00:00 2001 From: rncbc Date: Sun, 19 Apr 2015 16:29:44 +0100 Subject: [PATCH 4/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. (2) --- libjack/metadata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index a4e8969..3653e85 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -338,7 +338,7 @@ jack_get_properties (jack_uuid_t subject, if (memcmp (ustr, key.data, JACK_UUID_STRING_SIZE) != 0) { /* not relevant */ - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); continue; } @@ -628,7 +628,7 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject) if (memcmp (ustr, key.data, JACK_UUID_STRING_SIZE) != 0) { /* not relevant */ - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); continue; } From 4f4523bb00a3f12169e205d18bab3aceab50bce0 Mon Sep 17 00:00:00 2001 From: rncbc Date: Sun, 19 Apr 2015 16:57:44 +0100 Subject: [PATCH 5/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. (3) --- libjack/metadata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index 3653e85..3866742 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -446,7 +446,7 @@ jack_get_all_properties (jack_description_t** descriptions) */ if (key.size < JACK_UUID_STRING_SIZE + 2) { - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); continue; } @@ -621,7 +621,7 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject) */ if (key.size < JACK_UUID_STRING_SIZE + 2) { - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); continue; } From 71ad620daab1e9a844edfed6a10d07c4a89506f1 Mon Sep 17 00:00:00 2001 From: rncbc Date: Sun, 19 Apr 2015 17:17:13 +0100 Subject: [PATCH 6/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. (4) --- libjack/metadata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index 3866742..136dc01 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -524,7 +524,7 @@ jack_get_all_properties (jack_description_t** descriptions) current_prop->type = NULL; } - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); } @@ -642,7 +642,7 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject) } cnt++; - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); } From 3e8e8ee917545750d7a8408940348c45c2df1b01 Mon Sep 17 00:00:00 2001 From: rncbc Date: Sun, 19 Apr 2015 17:32:57 +0100 Subject: [PATCH 7/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. (5) --- libjack/metadata.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index 136dc01..6fcd0a4 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -331,7 +331,7 @@ jack_get_properties (jack_uuid_t subject, */ if (key.size < JACK_UUID_STRING_SIZE + 2) { - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); continue; } @@ -347,7 +347,7 @@ jack_get_properties (jack_uuid_t subject, */ if (data.size < 4) { - if (key.size > 0) free(key.data); + /* if (key.size > 0) free(key.data); */ if (data.size > 0) free(data.data); continue; } @@ -394,8 +394,8 @@ jack_get_properties (jack_uuid_t subject, prop->type = NULL; } - if (key.size > 0) free(key.data); - if (data.size > 0) free(data.data); + /* if (key.size > 0) free(key.data); */ + /* if (data.size > 0) free(data.data); */ ++cnt; } @@ -525,7 +525,7 @@ jack_get_all_properties (jack_description_t** descriptions) } /* if (key.size > 0) free(key.data); */ - if (data.size > 0) free(data.data); + /* if (data.size > 0) free(data.data); */ } cursor->close (cursor); @@ -642,8 +642,8 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject) } cnt++; - /* if (key.size > 0) free(key.data); */ - if (data.size > 0) free(data.data); + /* if (key.size > 0) free(key.data); */ + /* if (data.size > 0) free(data.data); */ } cursor->close (cursor); From 3b9c817a9488d00d5c0d37c48af092e698d1f616 Mon Sep 17 00:00:00 2001 From: rncbc Date: Sun, 19 Apr 2015 17:39:48 +0100 Subject: [PATCH 8/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. (6) --- libjack/metadata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index 6fcd0a4..6f69560 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -395,7 +395,7 @@ jack_get_properties (jack_uuid_t subject, } /* if (key.size > 0) free(key.data); */ - /* if (data.size > 0) free(data.data); */ + if (data.size > 0) free(data.data); ++cnt; } @@ -525,7 +525,7 @@ jack_get_all_properties (jack_description_t** descriptions) } /* if (key.size > 0) free(key.data); */ - /* if (data.size > 0) free(data.data); */ + if (data.size > 0) free(data.data); } cursor->close (cursor); From 940c811392eae31ac778b424bc38b0b517a2a8d5 Mon Sep 17 00:00:00 2001 From: rncbc Date: Mon, 20 Apr 2015 20:42:18 +0100 Subject: [PATCH 9/9] [metadata] fix unfreed DBT key/data tuples causing several mem-leaks. (7) --- libjack/metadata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libjack/metadata.c b/libjack/metadata.c index 6f69560..a12778f 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -643,7 +643,7 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject) cnt++; /* if (key.size > 0) free(key.data); */ - /* if (data.size > 0) free(data.data); */ + if (data.size > 0) free(data.data); } cursor->close (cursor);