]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
descrambler: fix leak in descrambler_notify_deliver()
authorJaroslav Kysela <perex@perex.cz>
Thu, 13 Sep 2018 06:41:32 +0000 (08:41 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 13 Sep 2018 06:46:59 +0000 (08:46 +0200)
src/descrambler/descrambler.c

index 1ed2a2f9f9662f9fe74e54a113d9db015df4cfdd..7d0a8c54ff345b953110482a6c4b3148440ffce8 100644 (file)
@@ -469,7 +469,6 @@ static void
 descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di )
 {
   streaming_message_t *sm;
-  struct descramble_info *di2;
   int r;
 
   lock_assert(&t->s_stream_mutex);
@@ -482,11 +481,7 @@ descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di )
   }
   memcpy(t->s_descramble_info, di, sizeof(*di));
 
-  di2 = malloc(sizeof(*di2));
-  memcpy(di2, di, sizeof(*di2));
-  sm = streaming_msg_create_data(SMT_DESCRAMBLE_INFO, di2);
-  sm->sm_data = di;
-
+  sm = streaming_msg_create_data(SMT_DESCRAMBLE_INFO, di);
   streaming_service_deliver((service_t *)t, sm);
 }
 
@@ -499,9 +494,11 @@ descrambler_notify_nokey( th_descrambler_runtime_t *dr )
   tvhdebug(LS_DESCRAMBLER, "no key for service='%s'", t->s_dvb_svcname);
 
   di = calloc(1, sizeof(*di));
-  di->pid = t->s_components.set_pmt_pid;
 
+  pthread_mutex_lock(&t->s_stream_mutex);
+  di->pid = t->s_components.set_pmt_pid;
   descrambler_notify_deliver(t, di);
+  pthread_mutex_unlock(&t->s_stream_mutex);
 }
 
 void