diff --git a/src/libinput-util.c b/src/libinput-util.c index eb6e3ecf..f1cc9d57 100644 --- a/src/libinput-util.c +++ b/src/libinput-util.c @@ -586,11 +586,15 @@ strv_join(char **strv, const char *joiner) if (!strv || !joiner) return NULL; + if (strv[0] == NULL) + return NULL; + for (s = strv, count = 0; *s; s++, count++) { slen += strlen(*s); } assert(slen < 1000); + assert(strlen(joiner) < 1000); slen += (count - 1) * strlen(joiner); diff --git a/test/test-misc.c b/test/test-misc.c index ea262f65..50fe018f 100644 --- a/test/test-misc.c +++ b/test/test-misc.c @@ -1366,6 +1366,7 @@ START_TEST(strjoin_test) { { NULL }, NULL, NULL } }; struct strjoin_test *t = tests; + struct strjoin_test nulltest = { {NULL}, "x", NULL }; while (t->strv[0]) { char *str; @@ -1377,6 +1378,8 @@ START_TEST(strjoin_test) free(str); t++; } + + ck_assert(strv_join(nulltest.strv, "x") == NULL); } END_TEST