]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
coverity fixes...
authorJaroslav Kysela <perex@perex.cz>
Sun, 22 Mar 2015 20:01:10 +0000 (21:01 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sun, 22 Mar 2015 20:01:10 +0000 (21:01 +0100)
16 files changed:
src/access.c
src/config.c
src/epggrab/module/opentv.c
src/idnode.c
src/input/mpegts.h
src/input/mpegts/dvb_psi.c
src/input/mpegts/mpegts_mux.c
src/input/mpegts/scanfile.c
src/parsers/parsers.c
src/rtsp.c
src/satip/rtp.c
src/satip/rtsp.c
src/satip/server.c
src/spawn.c
src/subscriptions.c
src/udp.c

index 443fad1a0594f976a1b17b79f9ddcfb0f889f8e5..12fa4db331198d4c21304dd62c0d6f493ae6351a 100644 (file)
@@ -155,8 +155,7 @@ access_ticket_verify2(const char *id, const char *resource)
     return NULL;
 
   if (tvheadend_webroot) {
-    strcpy(buf, tvheadend_webroot);
-    strcat(buf, at->at_resource);
+    snprintf(buf, sizeof(buf), "%s%s", tvheadend_webroot, at->at_resource);
     r = buf;
   } else {
     r = at->at_resource;
index 94ada7d4c590f64acdde7408629db402445ac4a3..cf7574ddc725d20325706894b30eacf1d85336c1 100644 (file)
@@ -1367,10 +1367,14 @@ config_boot ( const char *path, gid_t gid, uid_t uid )
 {
   struct stat st;
   char buf[1024];
-  const char *homedir = getenv("HOME");
 
   /* Generate default */
   if (!path) {
+    const char *homedir = getenv("HOME");
+    if (homedir == NULL) {
+      tvherror("START", "environment variable HOME is not set");
+      exit(EXIT_FAILURE);
+    }
     snprintf(buf, sizeof(buf), "%s/.hts/tvheadend", homedir);
     path = buf;
   }
index 24ded208c8dc4d322f4e3d1e407feeeb268bd8d1..f48e9d4827cb05154aad7bb9c1794f17b97518be 100644 (file)
@@ -701,12 +701,15 @@ static void _opentv_compile_pattern_list ( opentv_pattern_list_t *list, htsmsg_t
 { 
   opentv_pattern_t *pattern;
   htsmsg_field_t *f;
+  const char *s;
 
   TAILQ_INIT(list);
   if (!l) return;
   HTSMSG_FOREACH(f, l) {
     pattern = calloc(1, sizeof(opentv_pattern_t));
-    pattern->text = strdup(htsmsg_field_get_str(f));
+    s = htsmsg_field_get_str(f);
+    if (s == NULL) continue;
+    pattern->text = strdup(s);
     if (regcomp(&pattern->compiled, pattern->text, REG_EXTENDED)) {
       tvhlog(LOG_WARNING, "opentv", "error compiling pattern \"%s\"", pattern->text);
       free(pattern->text);
index fc91ff6776d25c387073495d0ef2aee62e26f95a..75aedee30a1e6ac8848733ae36b7abc2952b9d06 100644 (file)
@@ -1442,11 +1442,13 @@ idnode_thread ( void *p )
     HTSMSG_FOREACH(f, q) {
       node  = idnode_find(f->hmf_name, NULL, NULL);
       event = htsmsg_field_get_str(f);
-      m     = htsmsg_create_map();
-      htsmsg_add_str(m, "uuid", f->hmf_name);
-      if (!node)
-        htsmsg_add_u32(m, "removed", 1);
-      notify_by_msg(event, m);
+      if (event) {
+        m     = htsmsg_create_map();
+        htsmsg_add_str(m, "uuid", f->hmf_name);
+        if (!node)
+          htsmsg_add_u32(m, "removed", 1);
+        notify_by_msg(event, m);
+      }
     }
     
     /* Finished */
index 58b15bcaf30a0c2fcce998dfe4b4c500d8912082..8d17964ed71fcf791b88d33d9de1eb1c5ed9c04f 100644 (file)
@@ -939,7 +939,7 @@ static inline void mpegts_table_grab
 }
 void mpegts_table_release_
   (mpegts_table_t *mt);
-static inline void mpegts_table_release
+static inline int mpegts_table_release
   (mpegts_table_t *mt)
 {
   int v = atomic_dec(&mt->mt_arefcount, 1);
@@ -947,7 +947,9 @@ static inline void mpegts_table_release
   if (v == 1) {
     assert(mt->mt_destroyed == 1);
     mpegts_table_release_(mt);
+    return 1;
   }
+  return 0;
 }
 int mpegts_table_type
   ( mpegts_table_t *mt );
index 8e2ebcf8990e5e8e8cb81c039a6b89afa763522e..7f4fa584e2214df94e2be33f578767ebf1671429 100644 (file)
@@ -1432,13 +1432,17 @@ dvb_nit_mux
       break;
     case 0x81:
       if (priv == 0) goto lcn;
+      break;
     case 0x82:
       if (priv == 0) goto lcn;
+      break;
     case 0x83:
       if (priv == 0 || priv == 0x28 || priv == 0x29 || priv == 0xa5 ||
           priv == 0x233A) goto lcn;
+      break;
     case 0x86:
       if (priv == 0) goto lcn;
+      break;
     case 0x88:
       if (priv == 0x28) {
         /* HD simulcast */
index f366d8f863d72836309c9bc24a8f6088a2818766..95e1bfd4d9fe51a289c4ced91e1c1a50a267d5e3 100644 (file)
@@ -805,7 +805,8 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt )
     if (mt->mt_defer_cmd) {
       TAILQ_REMOVE(&mm->mm_defer_tables, mt, mt_defer_link);
       mt->mt_defer_cmd = 0;
-      mpegts_table_release(mt);
+      if (mpegts_table_release(mt))
+        return;
     }
     mt->mt_subscribed = 0;
     LIST_REMOVE(mt, mt_link);
index 48494cd73abecda499c97487ccd09a7bf8d55183..eb124272a090a723fc5fdfbce0bfdc463d7c7af8 100644 (file)
@@ -401,6 +401,7 @@ scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp )
   }
 
   mux = malloc(sizeof(dvb_mux_conf_t));
+  mux->dmc_fe_delsys = -1;
 
   x = htsmsg_get_str(l, "DELIVERY_SYSTEM");
 
index 082804d9810a832039feca21c641bff2233c5a4e..1a206478777e2b8df5d881eb9e208d2142c2aa88 100644 (file)
@@ -227,10 +227,9 @@ static void
 parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
           int len, int start)
 {
-  int l, muxlen, p, hdr = 0;
+  int l, muxlen, p;
   th_pkt_t *pkt;
   int64_t olddts = PTS_UNSET, oldpts = PTS_UNSET;
-  int64_t newdts = PTS_UNSET, newpts = PTS_UNSET;
 
   if(st->es_parser_state == 0) {
     if (start) {
@@ -253,8 +252,6 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
     oldpts = st->es_curpts;
     hlen = parse_pes_header(t, st, data + 6, len - 6);
     if (hlen >= 0 && st->es_buf.sb_ptr) {
-      newdts = st->es_curdts;
-      newpts = st->es_curpts;
       st->es_curdts = olddts;
       st->es_curpts = oldpts;
     }
@@ -287,10 +284,6 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
         st->es_buf.sb_err = 0;
       }
 
-      if (hdr && newdts != PTS_UNSET) {
-        st->es_curdts = newdts;
-        st->es_curpts = newpts;
-      }
       p += muxlen + 3;
     /* ADTS */
     } else if(p == 0 && d[0] == 0xff && (d[1] & 0xf0) == 0xf0) {
@@ -306,10 +299,6 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
       sbuf_append(&st->es_buf_a, d, muxlen);
       parse_mp4a_data(t, st, 1);
 
-      if (hdr && newdts != PTS_UNSET) {
-        st->es_curdts = newdts;
-        st->es_curpts = newpts;
-      }
       p += muxlen;
 
     /* Wrong bytestream */
@@ -319,10 +308,6 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
     }
   }
 
-  if (hdr && newdts != PTS_UNSET) {
-    st->es_curdts = newdts;
-    st->es_curpts = newpts;
-  }
   if (p > 0)
     sbuf_cut(&st->es_buf, p);
 }
index c453b7e99ab773c37d6faf7738266a67a0fdf3e7..58a38b7c63282b92165cc65700ef0dbf4d206292 100644 (file)
@@ -79,6 +79,8 @@ rtsp_options_decode( http_client_t *hc )
   int i, n, what = 0;
 
   p = http_arg_get(&hc->hc_args, "Public");
+  if (p == NULL)
+    return -EIO;
   n = http_tokenize(p, argv, 32, ',');
   for (i = 1; i < n; i++) {
     if (strcmp(argv[i], "DESCRIBE") == 0)
index d1c39fd2b183225ece3e775967d7455634e463f2..a942cc55f7f5a98d4a5d0881ed9b7b74f35949cb 100644 (file)
@@ -357,7 +357,7 @@ satip_rtcp_fec(int fec)
   strncpy(buf, s, sizeof(buf));
   buf[sizeof(buf)-1] = '\0';
   p = strchr(buf, '/');
-  while (*p) {
+  while (p && *p) {
     *p = *(p+1);
     p++;
   }
@@ -531,8 +531,7 @@ int satip_rtp_status(void *id, char *buf, int len)
   satip_rtp_session_t *rtp;
   int r = 0;
 
-  if (buf)
-    buf[0] = '\0';
+  buf[0] = '\0';
   pthread_mutex_lock(&satip_rtp_lock);
   rtp = satip_rtp_find(id);
   if (rtp) {
index 2098d21d2cc4634f237d3783ae63643e973270b2..95f5b6de2aa3c5110cbb2edf271febb23da93d94 100644 (file)
@@ -1179,7 +1179,7 @@ rtsp_process_describe(http_connection_t *hc)
   htsbuf_queue_init(&q, 0);
 
   arg = http_arg_get(&hc->hc_args, "Accept");
-  if (strcmp(arg, "application/sdp"))
+  if (arg == NULL || strcmp(arg, "application/sdp"))
     goto error;
 
   if ((u = rtsp_check_urlbase(u)) == NULL)
@@ -1190,8 +1190,10 @@ rtsp_process_describe(http_connection_t *hc)
   pthread_mutex_lock(&rtsp_lock);
 
   if (TAILQ_FIRST(&hc->hc_req_args)) {
-    if (stream < 0)
+    if (stream < 0) {
+      pthread_mutex_unlock(&rtsp_lock);
       goto error;
+    }
     r = rtsp_parse_cmd(hc, stream, -1, &rs, &valid, &oldstate);
     if (r) {
       pthread_mutex_unlock(&rtsp_lock);
@@ -1328,7 +1330,7 @@ rtsp_process_teardown(http_connection_t *hc)
   char *u = tvh_strdupa(hc->hc_url);
   struct session *rs = NULL;
   http_arg_list_t args;
-  char addrbuf[50];
+  char addrbuf[50], session[16];
   int stream;
 
   tcp_get_ip_str((struct sockaddr*)hc->hc_peer, addrbuf, sizeof(addrbuf));
@@ -1348,11 +1350,13 @@ rtsp_process_teardown(http_connection_t *hc)
     pthread_mutex_unlock(&rtsp_lock);
     http_error(hc, !rs ? HTTP_STATUS_BAD_SESSION : HTTP_STATUS_NOT_FOUND);
   } else {
+    strncpy(session, rs->session, sizeof(session));
+    session[sizeof(session)-1] = '\0';
     rtsp_close_session(rs);
     rtsp_free_session(rs);
     pthread_mutex_unlock(&rtsp_lock);
     http_arg_init(&args);
-    http_arg_set(&args, "Session", rs->session);
+    http_arg_set(&args, "Session", session);
     http_send_header(hc, HTTP_STATUS_OK, NULL, 0, NULL, NULL, 0, NULL, NULL, NULL);
     http_arg_flush(&args);
   }
index ee3c5a23d656825c20eae74ad0763c6762e98e2c..ff610844c6cab62acdab0dcf747770c3b8e0bd4c 100644 (file)
@@ -238,7 +238,7 @@ CONFIGID.UPNP.ORG: 0\r\n\
 
   tvhtrace("satips", "sending byebye");
 
-  for (attempt = 1; attempt < 3; attempt++) {
+  for (attempt = 1; attempt <= 3; attempt++) {
     switch (attempt) {
     case 1:
       nt = "upnp:rootdevice";
index fc8fd64085fdffb018d5cf08dbb9314c38a8999e..ee442340f7b96d51b111a9512fad0f1f3a46e0b0 100644 (file)
@@ -409,7 +409,16 @@ spawn_and_give_stdout(const char *prog, char *argv[], char *envp[],
   }
 
   if (!argv) argv = (void *)local_argv;
-  if (!argv[0]) argv[0] = (char*)prog;
+  if (!argv[0]) {
+    if (argv != (void *)local_argv) {
+      for (i = 1, e = argv; *e; i++, e++);
+      i = (i + 1) * sizeof(char *);
+      e = alloca(i);
+      memcpy(e, argv, i);
+      argv = e;
+    }
+    argv[0] = (char *)prog;
+  }
 
   if (!envp || !envp[0]) {
     e = environ;
index 40aaa6befa67668909f150d8e6462bb8a08cde42..256054c47fb5f036346286875ffcaafc6db8a85e 100644 (file)
@@ -466,8 +466,11 @@ subscription_input(void *opauqe, streaming_message_t *sm)
       if(s->ths_start_message != NULL) {
         streaming_target_deliver(s->ths_output, s->ths_start_message);
         s->ths_start_message = NULL;
-        if (s->ths_service)
+        if (s->ths_service) {
+          pthread_mutex_lock(&s->ths_service->s_stream_mutex);
           s->ths_service->s_running = 1;
+          pthread_mutex_unlock(&s->ths_service->s_stream_mutex);
+        }
       }
       s->ths_state = SUBSCRIPTION_GOT_SERVICE;
     }
index 7951b394084b1286e10ac8cf2de45694d627f480..3bf241cb057ceb776bbe86c15d27361b7fd5a07c 100644 (file)
--- a/src/udp.c
+++ b/src/udp.c
@@ -360,6 +360,8 @@ udp_sendinit ( const char *subsystem, const char *name,
     return UDP_FATAL_ERROR;
   }
 
+  uc->fd = fd;
+
   /* Bind to interface */
   ifindex = udp_ifindex_required(uc) ? udp_get_ifindex(ifname) : 0;
   if (ifindex < 0) {
@@ -406,7 +408,6 @@ udp_sendinit ( const char *subsystem, const char *name,
     tvhwarn(subsystem, "%s - cannot increase UDP tx buffer size [%s]",
             name, strerror(errno));
 
-  uc->fd = fd;
   return uc;
 
 error: