From 80afe5baf79065885cad819babba7c7576be8779 Mon Sep 17 00:00:00 2001 From: Moritz Grimm Date: Thu, 7 Jan 2021 04:19:06 +0100 Subject: [PATCH] Fix crash related to unconfigured intakes --- NEWS | 2 ++ src/stream.c | 9 +++++++++ tests/check_stream.c | 8 +++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index d5555bb..3d8353a 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ Changes in 1.0.2, released on XXXX-XX-XX: that do not contain the respective values. From gui-lux on Github (#16). * Fix a crash in one instance of querying the metadata program. From taku0220 on Github (#23). + * Fix a crash when referencing an unconfigured intake in a stream. From + Optiqus on Github (#28). * Minor documentation tweak diff --git a/src/stream.c b/src/stream.c index 5136d8c..2f247dd 100644 --- a/src/stream.c +++ b/src/stream.c @@ -383,6 +383,7 @@ stream_configure(struct stream *s) cfg_server_list_t servers; cfg_stream_t cfg_stream; cfg_server_t cfg_server; + cfg_intake_t cfg_intake; const char *server; streams = cfg_get_streams(); @@ -409,6 +410,14 @@ stream_configure(struct stream *s) return (-1); } + cfg_intake = stream_get_cfg_intake(s); + if (0 > cfg_intake_validate(cfg_intake, NULL)) { + log_error("stream: %s: referencing unconfigured intake (%s)", + s->name, cfg_intake_get_name(cfg_intake)); + _stream_reset(s); + return (-1); + } + return (0); } diff --git a/tests/check_stream.c b/tests/check_stream.c index 50c3984..7744a87 100644 --- a/tests/check_stream.c +++ b/tests/check_stream.c @@ -10,6 +10,8 @@ Suite * stream_suite(void); void setup_checked(void); void teardown_checked(void); +cfg_intake_list_t intakes; + START_TEST(test_stream) { stream_t s; @@ -17,6 +19,7 @@ START_TEST(test_stream) char *m_str; cfg_server_t srv_cfg; cfg_stream_t str_cfg; + cfg_intake_t int_cfg; cfg_server_list_t servers = cfg_get_servers(); cfg_stream_list_t streams = cfg_get_streams(); @@ -32,7 +35,8 @@ START_TEST(test_stream) ck_assert_ptr_ne(srv_cfg, NULL); str_cfg = stream_get_cfg_stream(s); ck_assert_ptr_ne(str_cfg, NULL); - ck_assert_ptr_ne(stream_get_cfg_intake(s), NULL); + int_cfg = stream_get_cfg_intake(s); + ck_assert_ptr_ne(int_cfg, NULL); ck_assert_int_ne(stream_configure(s), 0); ck_assert_int_eq(cfg_server_set_hostname(srv_cfg, servers, "localhost", NULL), 0); @@ -48,6 +52,8 @@ START_TEST(test_stream) ck_assert_int_eq(cfg_stream_set_mountpoint(str_cfg, streams, "/test.ogg", NULL), 0); ck_assert_int_ne(stream_configure(s), 0); ck_assert_int_eq(cfg_stream_set_format(str_cfg, streams, "mp3", NULL), 0); + ck_assert_int_ne(stream_configure(s), 0); + cfg_intake_set_filename(int_cfg, intakes, "stream_test", NULL); ck_assert_int_eq(stream_configure(s), 0); ck_assert_int_eq(cfg_stream_set_format(str_cfg, streams, "ogg", NULL), 0); ck_assert_int_eq(stream_configure(s), 0);