From: Jaroslav Kysela Date: Mon, 8 Feb 2016 08:41:11 +0000 (+0100) Subject: wizard: don't crash when unexpected network type is entered, fixes #3561 X-Git-Tag: v4.2.1~1066 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9ff6b9bc015d05bb1210a0edcf329c94ca46493e;p=thirdparty%2Ftvheadend.git wizard: don't crash when unexpected network type is entered, fixes #3561 --- diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 58f65744e..39bffd434 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -1808,13 +1808,13 @@ linuxdvb_frontend_wizard_set( tvh_input_t *ti, htsmsg_t *conf, const char *lang linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)ti; const char *ntype = htsmsg_get_str(conf, "mpegts_network_type"); mpegts_network_t *mn; + htsmsg_t *nlist; if (LIST_FIRST(&lfe->mi_mux_active)) return; + mpegts_network_wizard_create(ntype, &nlist, lang); mn = linuxdvb_frontend_wizard_network(lfe); if (ntype && (mn == NULL || mn->mn_wizard)) { - htsmsg_t *nlist; - mpegts_network_wizard_create(ntype, &nlist, lang); if (lfe->lfe_satconf) { htsmsg_t *conf = htsmsg_create_map(); htsmsg_t *elems = htsmsg_create_list(); @@ -1837,6 +1837,8 @@ linuxdvb_frontend_wizard_set( tvh_input_t *ti, htsmsg_t *conf, const char *lang if (linuxdvb_frontend_wizard_network(lfe)) mpegts_input_set_enabled((mpegts_input_t *)lfe, 1); linuxdvb_adapter_save(lfe->lfe_adapter); + } else { + htsmsg_destroy(nlist); } } diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index 096f97471..589b39360 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -543,7 +543,7 @@ mpegts_network_wizard_create /* only one network per type */ LIST_FOREACH(mn, &mpegts_network_all, mn_global_link) - if (mn->mn_id.in_class == mnb->idc) + if (mn->mn_id.in_class == mnb->idc && mn->mn_wizard) goto found; conf = htsmsg_create_map(); @@ -597,6 +597,8 @@ mpegts_network_builder_find ( const char *clazz ) { mpegts_network_builder_t *mnb; + if (clazz == NULL) + return NULL; LIST_FOREACH(mnb, &mpegts_network_builders, link) { if (!strcmp(mnb->idc->ic_class, clazz)) return mnb; diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index 803f66470..0b7e65368 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -1793,14 +1793,14 @@ satip_frontend_wizard_set( tvh_input_t *ti, htsmsg_t *conf, const char *lang ) satip_frontend_t *lfe = (satip_frontend_t*)ti; const char *ntype = htsmsg_get_str(conf, "mpegts_network_type"); mpegts_network_t *mn; + htsmsg_t *nlist; + mpegts_network_wizard_create(ntype, &nlist, lang); mn = satip_frontend_wizard_network(lfe); - if (ntype && lfe->sf_master == 0 && (mn == NULL || mn->mn_wizard)) { + if (nlist && lfe->sf_master == 0 && (mn == NULL || mn->mn_wizard)) { htsmsg_t *conf = htsmsg_create_map(); htsmsg_t *list = htsmsg_create_list(); htsmsg_t *pos = htsmsg_create_map(); - htsmsg_t *nlist; - mpegts_network_wizard_create(ntype, &nlist, lang); htsmsg_add_bool(pos, "enabled", 1); htsmsg_add_msg(pos, "networks", nlist); htsmsg_add_msg(list, NULL, pos); @@ -1810,6 +1810,8 @@ satip_frontend_wizard_set( tvh_input_t *ti, htsmsg_t *conf, const char *lang ) if (satip_frontend_wizard_network(lfe)) mpegts_input_set_enabled((mpegts_input_t *)lfe, 1); satip_device_save(lfe->sf_device); + } else { + htsmsg_destroy(nlist); } } diff --git a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c index c515fde5a..19393eef1 100644 --- a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c +++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c @@ -618,17 +618,19 @@ tvhdhomerun_frontend_wizard_set( tvh_input_t *ti, htsmsg_t *conf, const char *la tvhdhomerun_frontend_t *hfe = (tvhdhomerun_frontend_t*)ti; const char *ntype = htsmsg_get_str(conf, "mpegts_network_type"); mpegts_network_t *mn; + htsmsg_t *nlist; mn = tvhdhomerun_frontend_wizard_network(hfe); + mpegts_network_wizard_create(ntype, &nlist, lang); if (ntype && (mn == NULL || mn->mn_wizard)) { - htsmsg_t *nlist = htsmsg_create_list(); - mpegts_network_wizard_create(ntype, &nlist, lang); htsmsg_add_str(nlist, NULL, ntype); mpegts_input_set_networks((mpegts_input_t *)hfe, nlist); htsmsg_destroy(nlist); if (tvhdhomerun_frontend_wizard_network(hfe)) mpegts_input_set_enabled((mpegts_input_t *)hfe, 1); tvhdhomerun_device_save(hfe->hf_device); + } else { + htsmsg_destroy(nlist); } } diff --git a/src/wizard.c b/src/wizard.c index 768c5a884..be4186efd 100644 --- a/src/wizard.c +++ b/src/wizard.c @@ -615,7 +615,9 @@ NETWORK_FCN(6) DESCRIPTION_FCN(network, N_("\ Select network type for detected tuners.\n\ -The T means terresterial, C is cable and S is satellite.\ +The T means terresterial, C is cable and S is satellite.\n\ +If you do not assign a network type to the tuner, the tuner\ +will not be used in TVH.\ "))