fix memory leak and delete unused buffer
authorSeokHoon Lee <andy.shlee@samsung.com>
Tue, 14 Feb 2017 04:42:51 +0000 (13:42 +0900)
committerSeokHoon Lee <andy.shlee@samsung.com>
Wed, 15 Feb 2017 05:16:25 +0000 (14:16 +0900)
- fix nativeidex underflow.
- delete unused block about buf
- free msg after use.
- remove ta memoryleak in error case

Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: Ib55adb29dc49e2e21852bd509c828040879253b6

gst/rtsp-server/gstwfdmessage.c
gst/rtsp-server/rtsp-client-wfd.c

index 4ad9d1b..6540b9d 100644 (file)
@@ -864,6 +864,7 @@ gst_wfd_message_free (GstWFDMessage * msg)
 
   gst_wfd_message_uninit (msg);
   g_free (msg);
+  msg = NULL;
 
   return GST_WFD_OK;
 }
@@ -1670,12 +1671,14 @@ gst_wfd_message_set_supported_video_format (GstWFDMessage * msg,
 
   if (v_codec != GST_WFD_VIDEO_UNKNOWN) {
     msg->video_formats->list = g_new0 (GstWFDVideoCodec, 1);
+
+    temp >>= 1;
     while (temp) {
       nativeindex++;
       temp >>= 1;
     }
 
-    msg->video_formats->list->native = nativeindex - 1;
+    msg->video_formats->list->native = nativeindex;
     msg->video_formats->list->native <<= 3;
 
     if (v_native == GST_WFD_VIDEO_VESA_RESOLUTION)
index d75b7c8..969e26a 100644 (file)
@@ -2054,9 +2054,6 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
 
   g_return_if_fail (priv != NULL);
 
-  buf = g_string_new ("");
-  g_return_if_fail (buf != NULL);
-
   if (msg_type == M3_REQ_MSG) {
     /* create M3 request to be sent */
     wfd_res = gst_wfd_message_new (&msg);
@@ -2196,14 +2193,17 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
       goto error;
     }
 
+    buf = g_string_new ("");
+    if (buf == NULL)
+      goto error;
+
     g_string_append_printf (buf, "rtsp://");
 
     if (priv->host_address) {
       g_string_append (buf, priv->host_address);
     } else {
       GST_ERROR_OBJECT (client, "Failed to get host address");
-      if (buf)
-        g_string_free (buf, TRUE);
+      g_string_free (buf, TRUE);
       goto error;
     }
 
@@ -2353,18 +2353,6 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
       goto error;
     }
 
-    g_string_append_printf (buf, "rtsp://");
-
-    if (priv->host_address) {
-      g_string_append (buf, priv->host_address);
-    } else {
-      GST_ERROR_OBJECT (client, "Failed to get host address");
-      if (buf) g_string_free (buf, TRUE);
-      goto error;
-    }
-
-    g_string_append_printf (buf, "/wfd1.0/streamid=0");
-
     /* set the preffered TCP ports for the WFD server */
     if (priv->ts_mode == WFD_TS_UDP) {
       wfd_res =
@@ -2412,32 +2400,49 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type,
       *len = strlen (*data);
     }
   } else if (msg_type == M5_REQ_MSG) {
+    buf = g_string_new ("");
+    if (buf == NULL)
+      goto error;
     g_string_append (buf, "wfd_trigger_method: SETUP");
     g_string_append (buf, "\r\n");
     *len = buf->len;
     *data = g_string_free (buf, FALSE);
   } else if (msg_type == TEARDOWN_TRIGGER) {
+    buf = g_string_new ("");
+    if (buf == NULL)
+      goto error;
     g_string_append (buf, "wfd_trigger_method: TEARDOWN");
     g_string_append (buf, "\r\n");
     *len = buf->len;
     *data = g_string_free (buf, FALSE);
   } else if (msg_type == PLAY_TRIGGER) {
+    buf = g_string_new ("");
+    if (buf == NULL)
+      goto error;
     g_string_append (buf, "wfd_trigger_method: PLAY");
     g_string_append (buf, "\r\n");
     *len = buf->len;
     *data = g_string_free (buf, FALSE);
   } else if (msg_type == PAUSE_TRIGGER) {
+    buf = g_string_new ("");
+    if (buf == NULL)
+      goto error;
     g_string_append (buf, "wfd_trigger_method: PAUSE");
     g_string_append (buf, "\r\n");
     *len = buf->len;
     *data = g_string_free (buf, FALSE);
-  } else {
-    return;
   }
 
+  if (msg != NULL)
+    gst_wfd_message_free(msg);
+
   return;
 
 error:
+
+  if (msg != NULL)
+    gst_wfd_message_free(msg);
+
   *data = NULL;
   *len = 0;
 
@@ -3785,17 +3790,17 @@ gst_rtsp_wfd_client_switch_to_udp (GstRTSPWFDClient * client)
   GList *tl = NULL;
   GPtrArray *ta = NULL;
 
+  if (client->priv->ts_mode == WFD_TS_UDP) {
+    GST_ERROR_OBJECT (client, "Transport already UDP");
+    return res;
+  }
+
   ta = g_ptr_array_new();
 
   tl = gst_rtsp_stream_transport_filter (client->priv->stats.stream, NULL, NULL);
   client->priv->transports = tl;
   g_ptr_array_add (ta, tl->data);
 
-  if (client->priv->ts_mode == WFD_TS_UDP) {
-    GST_ERROR_OBJECT (client, "Transport already UDP");
-    return res;
-  }
-
   client->priv->ts_mode = WFD_TS_UDP;
   res = prepare_transport_switch_request (client, &request);
   if (GST_RTSP_OK != res) {