diff options
author | Patrick Gaskin <patrick@pgaskin.net> | 2021-01-03 03:29:35 -0500 |
---|---|---|
committer | Arun Raghavan <arun@asymptotic.io> | 2021-01-12 21:04:10 -0500 |
commit | d15a6e543f420f6e504d868f7f3a535377a16ece (patch) | |
tree | 61787a45c6034103176a4cb2a15d4f6b6defdff1 | |
parent | e68aa03f292a0e0bda00f15a85e4928d8fafbe56 (diff) | |
download | pulseaudio-d15a6e543f420f6e504d868f7f3a535377a16ece.tar.gz |
cli: Fix crash when using .include with an empty directory
This would previously fail the size > 0 assertion in pa_xmalloc.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/454>
-rw-r--r-- | src/pulsecore/cli-command.c | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c index 5205349bd..58f3d1e2c 100644 --- a/src/pulsecore/cli-command.c +++ b/src/pulsecore/cli-command.c @@ -2074,34 +2074,34 @@ int pa_cli_command_execute_line_stateful(pa_core *c, const char *s, pa_strbuf *b } closedir(d); - - count = pa_dynarray_size(files); - sorted_files = pa_xnew(char*, count); - for (i = 0; i < count; ++i) - sorted_files[i] = pa_dynarray_get(files, i); - pa_dynarray_free(files); - - for (i = 0; i < count; ++i) { - for (unsigned j = 0; j < count; ++j) { - if (strcmp(sorted_files[i], sorted_files[j]) < 0) { - char *tmp = sorted_files[i]; - sorted_files[i] = sorted_files[j]; - sorted_files[j] = tmp; + if ((count = pa_dynarray_size(files))) { + sorted_files = pa_xnew(char*, count); + for (i = 0; i < count; ++i) + sorted_files[i] = pa_dynarray_get(files, i); + pa_dynarray_free(files); + + for (i = 0; i < count; ++i) { + for (unsigned j = 0; j < count; ++j) { + if (strcmp(sorted_files[i], sorted_files[j]) < 0) { + char *tmp = sorted_files[i]; + sorted_files[i] = sorted_files[j]; + sorted_files[j] = tmp; + } } } - } - for (i = 0; i < count; ++i) { - if (!failed) { - if (pa_cli_command_execute_file(c, sorted_files[i], buf, fail) < 0 && *fail) - failed = true; - } + for (i = 0; i < count; ++i) { + if (!failed) { + if (pa_cli_command_execute_file(c, sorted_files[i], buf, fail) < 0 && *fail) + failed = true; + } - pa_xfree(sorted_files[i]); + pa_xfree(sorted_files[i]); + } + pa_xfree(sorted_files); + if (failed) + return -1; } - pa_xfree(sorted_files); - if (failed) - return -1; } } else if (pa_cli_command_execute_file(c, filename, buf, fail) < 0 && *fail) { return -1; |