]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Fix invalid memory usage in mpegts/iptv, mpegts/tsfile, subscriptions, and tvhtime
authorKyle Sanderson <kyle.leet@gmail.com>
Sat, 27 Jun 2015 01:38:42 +0000 (18:38 -0700)
committerJaroslav Kysela <perex@perex.cz>
Sat, 27 Jun 2015 10:14:49 +0000 (12:14 +0200)
src/input/mpegts/iptv/iptv_rtsp.c
src/input/mpegts/tsfile/tsfile.c
src/subscriptions.c
src/tvhtime.c

index a8ca56e96563c1078c29bb266c588186eb79c48b..08e44d762101854e3af3157feee7e7e10834dd92 100644 (file)
@@ -197,12 +197,14 @@ iptv_rtsp_stop
   ( iptv_mux_t *im )
 {
   rtsp_priv_t *rp = im->im_data;
-  int play = rp->play;
+  int play;
 
   lock_assert(&global_lock);
 
   if (rp == NULL)
     return;
+
+  play = rp->play;
   im->im_data = NULL;
   rp->hc->hc_aux = NULL;
   if (play)
index 1cfc4e31af187b6f65499de3f1c30f5f38da60f2..1581683e46d3b0fa98e0c39233b5ebafdd346bf1 100644 (file)
@@ -47,14 +47,17 @@ tsfile_network_create_service
 {
   pthread_mutex_lock(&tsfile_lock);
   mpegts_service_t *s = mpegts_service_create1(NULL, mm, sid, pmt_pid, NULL);
-  s->s_config_save = tsfile_service_config_save;
-  pthread_mutex_unlock(&tsfile_lock);
 
   // TODO: HACK: REMOVE ME
   if (s) {
+    s->s_config_save = tsfile_service_config_save;
+    pthread_mutex_unlock(&tsfile_lock);
     channel_t *c = channel_create(NULL, NULL, NULL);
     service_mapper_link((service_t*)s, c, NULL);
   }
+  else
+    pthread_mutex_unlock(&tsfile_lock);
+
   return s;
 }
 
index df8930aa4121cd3f0442c23ee8d42b31fe75e5a3..e5a50707463ea3655757c825edddc4a8e0b0e6bd 100644 (file)
@@ -549,13 +549,15 @@ subscription_input(void *opauqe, streaming_message_t *sm)
 void
 subscription_unsubscribe(th_subscription_t *s, int quiet)
 {
-  service_t *t = s->ths_service;
+  service_t *t;
   char buf[512];
   size_t l = 0;
 
   if (s == NULL)
     return;
 
+  t = s->ths_service;
+
   lock_assert(&global_lock);
 
   s->ths_state = SUBSCRIPTION_ZOMBIE;
index ae4688dfca88ff1b64952b68a16c67a3a3ccfa6e..2717caa19bc656403889591d6ce9c07ab6fefb0f 100644 (file)
@@ -67,8 +67,9 @@ ntp_shm_init ( void )
     return NULL;
 
   shmptr = shmat(shmid, 0, 0);
-  memset(shmptr, 0, sizeof(ntp_shm_t));
+
   if (shmptr) {
+    memset(shmptr, 0, sizeof(ntp_shm_t));
     shmptr->mode      = 1;
     shmptr->precision = -1;
     shmptr->nsamples  = 1;