]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
wizard: don't crash when unexpected network type is entered, fixes #3561
authorJaroslav Kysela <perex@perex.cz>
Mon, 8 Feb 2016 08:41:11 +0000 (09:41 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 8 Feb 2016 08:41:11 +0000 (09:41 +0100)
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/mpegts_network.c
src/input/mpegts/satip/satip_frontend.c
src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c
src/wizard.c

index 58f65744e27fc3d5146025874a37012d53219020..39bffd434d584efbe7c4845f834a629079f89ef0 100644 (file)
@@ -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);
   }
 }
 
index 096f9747192f57aab4d81f2782b40a500fcf2d29..589b39360605ad7e33dba1922b930c89e92bf6a9 100644 (file)
@@ -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;
index 803f664708285ee89eadf270cf8e3ac6e9357d5b..0b7e65368e8ee36434be1ba6cb7772da40ae7cf2 100644 (file)
@@ -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);
   }
 }
 
index c515fde5a31c45106a9d5ad51b9df561510c49dc..19393eef188473ecdaaf87a155a2e8d21bbe1c7d 100644 (file)
@@ -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);
   }
 }
 
index 768c5a88426ab82811ce8b75ae0a1336c260fd55..be4186efd2fc0f519228d833dcc5390fb5887585 100644 (file)
@@ -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.\
 "))