From 7cb7e171c6f836e64343d615b7a468b9ba1d2839 Mon Sep 17 00:00:00 2001 From: Hyunjun Ko Date: Mon, 13 Jul 2015 16:29:41 +0900 Subject: [PATCH] fix unchecking NULL codes and other prevent defects Change-Id: I3ece239a3515d68128ce8b5faa82fdb4bab21127 --- examples/test-wfd.c | 2 +- gst/rtsp-server/gstwfdmessage.c | 29 ++++++++++---------- gst/rtsp-server/rtsp-client-wfd.c | 45 ++++++++++++++++++++++++++++---- gst/rtsp-server/rtsp-media-factory-wfd.c | 6 +++-- gst/rtsp-server/rtsp-server-wfd.c | 38 ++++++++++++++++++++++----- packaging/gst-rtsp-server.spec | 2 +- 6 files changed, 92 insertions(+), 30 deletions(-) diff --git a/examples/test-wfd.c b/examples/test-wfd.c index 3d9782f..26af281 100644 --- a/examples/test-wfd.c +++ b/examples/test-wfd.c @@ -103,7 +103,7 @@ int main (int argc, char *argv[]) "( " VIDEO_PIPELINE " )"); g_object_ref (factory); gst_rtsp_mount_points_add_factory (mounts, TEST_MOUNT_POINT, GST_RTSP_MEDIA_FACTORY(factory)); - g_object_unref (mounts); + if (mounts) g_object_unref (mounts); /* attach the server to the default maincontext */ if ((id = gst_rtsp_server_attach (GST_RTSP_SERVER_CAST(server), NULL)) == 0) diff --git a/gst/rtsp-server/gstwfdmessage.c b/gst/rtsp-server/gstwfdmessage.c index 759216d..3abdfc8 100644 --- a/gst/rtsp-server/gstwfdmessage.c +++ b/gst/rtsp-server/gstwfdmessage.c @@ -69,12 +69,6 @@ #define FREE_STRING(field) g_free (field); (field) = NULL #define REPLACE_STRING(field, val) FREE_STRING(field); (field) = g_strdup (val) -static void -free_string (gchar ** str) -{ - FREE_STRING (*str); -} - #define INIT_ARRAY(field, type, init_func) \ G_STMT_START { \ if (field) { \ @@ -675,7 +669,8 @@ gst_wfd_parse_attribute (gchar * buffer, GstWFDMessage * msg) msg->uibc_capability->input_category_list.input_cat |= GST_WFD_UIBC_INPUT_CAT_UNKNOWN; } while (read_len < rem_len); - v = strstr (v, "generic_cap_list"); + + if ((v = strstr (v, "generic_cap_list"))) { WFD_READ_CHAR_END_STRING (tstring, '='); if (!g_strcmp0 (tstring, "generic_cap_list")) { gchar temp[8192]; @@ -715,7 +710,9 @@ gst_wfd_parse_attribute (gchar * buffer, GstWFDMessage * msg) GST_WFD_UIBC_INPUT_TYPE_UNKNOWN; } while (read_len < rem_len); } - v = strstr (v, "hidc_cap_list"); + } + + if ((v = strstr (v, "hidc_cap_list"))) { WFD_SKIP_SPACE (v); WFD_READ_CHAR_END_STRING (tstring, '='); if (!g_strcmp0 (tstring, "hidc_cap_list")) { @@ -773,14 +770,18 @@ gst_wfd_parse_attribute (gchar * buffer, GstWFDMessage * msg) } } while (read_len < rem_len); } + } + if (strstr (v, "port")) { v = strstr (v, "port"); - WFD_READ_CHAR_END_STRING (tstring, '='); - if (!g_strcmp0 (tstring, "port")) { - WFD_SKIP_EQUAL (v); - WFD_READ_CHAR_END_STRING (tstring, ';'); - if (!strstr (tstring, "none")) { - msg->uibc_capability->tcp_port = strtoul (tstring, NULL, 10); + if (v) { + WFD_READ_CHAR_END_STRING (tstring, '='); + if (!g_strcmp0 (tstring, "port")) { + WFD_SKIP_EQUAL (v); + WFD_READ_CHAR_END_STRING (tstring, ';'); + if (!strstr (tstring, "none")) { + msg->uibc_capability->tcp_port = strtoul (tstring, NULL, 10); + } } } } diff --git a/gst/rtsp-server/rtsp-client-wfd.c b/gst/rtsp-server/rtsp-client-wfd.c index 267fcfa..466824e 100644 --- a/gst/rtsp-server/rtsp-client-wfd.c +++ b/gst/rtsp-server/rtsp-client-wfd.c @@ -228,10 +228,13 @@ gst_rtsp_wfd_client_init (GstRTSPWFDClient * client) { GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + g_return_if_fail (priv != NULL); + client->priv = priv; priv->protection_enabled = FALSE; priv->video_native_resolution = GST_WFD_VIDEO_CEA_RESOLUTION; priv->video_resolution_supported = GST_WFD_CEA_640x480P60; + priv->keep_alive_flag = FALSE; g_mutex_init (&priv->keep_alive_lock); GST_INFO_OBJECT (client, "Client is initialized"); } @@ -243,6 +246,9 @@ gst_rtsp_wfd_client_finalize (GObject * obj) GstRTSPWFDClient *client = GST_RTSP_WFD_CLIENT (obj); GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + g_return_if_fail (GST_IS_RTSP_WFD_CLIENT (obj)); + g_return_if_fail (priv != NULL); + GST_INFO ("finalize client %p", client); g_mutex_clear (&priv->keep_alive_lock); @@ -323,6 +329,9 @@ wfd_get_param_request_done (GstRTSPWFDClient * client) { GstRTSPResult res = GST_RTSP_OK; GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + + g_return_if_fail (priv != NULL); + priv->m3_done = TRUE; GST_INFO_OBJECT (client, "M3 done.."); @@ -729,7 +738,9 @@ wfd_get_prefered_resolution (guint64 srcResolution, break; } } - break; + break; + + default: *cMaxWidth = 0; *cMaxHeight = 0; *cFramerate = 0; @@ -766,12 +777,19 @@ handle_wfd_response (GstRTSPClient * client, GstRTSPContext * ctx) GstRTSPWFDClient *_client = GST_RTSP_WFD_CLIENT (client); GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + g_return_if_fail (priv != NULL); + GST_INFO_OBJECT (_client, "Handling response.."); - if (!ctx) + if (!ctx) { GST_ERROR_OBJECT (_client, "Context is NULL"); - if (!ctx->response) + goto error; + } + + if (!ctx->response) { GST_ERROR_OBJECT (_client, "Response is NULL"); + goto error; + } /* parsing the GET_PARAMTER response */ res = gst_rtsp_message_get_body (ctx->response, (guint8 **) & data, &size); @@ -1030,9 +1048,11 @@ handle_wfd_set_param_request (GstRTSPClient * client, GstRTSPContext * ctx) GST_INFO_OBJECT (_client, "SET_PARAMETER Request : %s(%d)", data, size); if (g_strcmp0 ((const gchar *) data, "wfd_idr_request")) send_generic_wfd_response (_client, GST_RTSP_STS_OK, ctx); +#if 0 else /* TODO-WFD : Handle other set param request */ send_generic_wfd_response (_client, GST_RTSP_STS_OK, ctx); +#endif } else { goto bad_request; } @@ -1209,9 +1229,13 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type, GString *buf = NULL; GstWFDMessage *msg = NULL; GstWFDResult wfd_res = GST_WFD_EINVAL; - GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + GstRTSPWFDClientPrivate *priv = NULL; + priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + + 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 */ @@ -2079,6 +2103,9 @@ gst_rtsp_wfd_client_set_video_supported_resolution (GstRTSPWFDClient * client, { GstRTSPResult res = GST_RTSP_OK; GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + + g_return_val_if_fail (priv != NULL, GST_RTSP_EINVAL); + priv->video_resolution_supported = supported_reso; GST_DEBUG ("Resolution : %"G_GUINT64_FORMAT, supported_reso); @@ -2091,6 +2118,9 @@ gst_rtsp_wfd_client_set_video_native_resolution (GstRTSPWFDClient * client, { GstRTSPResult res = GST_RTSP_OK; GstRTSPWFDClientPrivate *priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + + g_return_val_if_fail (priv != NULL, GST_RTSP_EINVAL); + priv->video_native_resolution = native_reso; GST_DEBUG ("Native Resolution : %"G_GUINT64_FORMAT, native_reso); @@ -2101,11 +2131,14 @@ static gboolean wfd_ckeck_keep_alive_response (gpointer userdata) { GstRTSPWFDClient *client = (GstRTSPWFDClient *)userdata; - GstRTSPWFDClientPrivate *priv; + GstRTSPWFDClientPrivate *priv = NULL; if (!client) { return FALSE; } + priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + g_return_val_if_fail (priv != NULL, GST_RTSP_EINVAL); + if (priv->keep_alive_flag) { return FALSE; } @@ -2152,6 +2185,8 @@ keep_alive_condition(gpointer userdata) } priv = GST_RTSP_WFD_CLIENT_GET_PRIVATE (client); + g_return_val_if_fail (priv != NULL, FALSE); + g_mutex_lock(&priv->keep_alive_lock); if(!priv->keep_alive_flag) { g_timeout_add(5000, wfd_ckeck_keep_alive_response, client); diff --git a/gst/rtsp-server/rtsp-media-factory-wfd.c b/gst/rtsp-server/rtsp-media-factory-wfd.c index c0f50f2..1b34961 100644 --- a/gst/rtsp-server/rtsp-media-factory-wfd.c +++ b/gst/rtsp-server/rtsp-media-factory-wfd.c @@ -283,8 +283,10 @@ rtsp_media_wfd_dump_data (GstPad * pad, GstPadProbeInfo *info, gpointer u_data) size = gst_buffer_get_size (buffer); f = fopen ("/root/probe.ts", "a"); - fwrite (data, size, 1, f); - fclose (f); + if (f != NULL) { + fwrite (data, size, 1, f); + fclose (f); + } gst_buffer_unmap (buffer, &mapinfo); } diff --git a/gst/rtsp-server/rtsp-server-wfd.c b/gst/rtsp-server/rtsp-server-wfd.c index eb56e53..5ab2599 100644 --- a/gst/rtsp-server/rtsp-server-wfd.c +++ b/gst/rtsp-server/rtsp-server-wfd.c @@ -118,6 +118,8 @@ gst_rtsp_wfd_server_init (GstRTSPWFDServer * server) { GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE (server); + g_return_if_fail (priv != NULL); + server->priv = priv; server->priv->native_resolution = 0; server->priv->supported_resolution = 1; @@ -204,6 +206,8 @@ create_client_wfd (GstRTSPServer * server) GstRTSPAuth *auth = NULL; GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server); + g_return_val_if_fail (priv != NULL, NULL); + GST_INFO_OBJECT (server, "New Client is being created"); /* a new client connected, create a session to handle the client. */ @@ -276,6 +280,7 @@ gst_rtsp_wfd_server_set_supported_reso(GstRTSPWFDServer *server, guint64 support GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server); g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR); + g_return_val_if_fail (priv != NULL, GST_RTSP_ERROR); GST_RTSP_WFD_SERVER_LOCK (server); @@ -284,18 +289,37 @@ gst_rtsp_wfd_server_set_supported_reso(GstRTSPWFDServer *server, guint64 support GST_RTSP_WFD_SERVER_UNLOCK (server); return res; } + GstRTSPResult gst_rtsp_wfd_server_set_video_native_reso (GstRTSPWFDServer *server, guint64 native_reso) { - GstRTSPResult res = GST_RTSP_OK; - GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server); + GstRTSPResult res = GST_RTSP_OK; + GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server); + + g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR); + g_return_val_if_fail (priv != NULL, GST_RTSP_ERROR); - g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR); + GST_RTSP_WFD_SERVER_LOCK (server); - GST_RTSP_WFD_SERVER_LOCK (server); + priv->native_resolution = native_reso; - priv->native_resolution = native_reso; + GST_RTSP_WFD_SERVER_UNLOCK (server); + return res; +} - GST_RTSP_WFD_SERVER_UNLOCK (server); - return res; +GstRTSPResult +gst_rtsp_wfd_server_set_audio_codec (GstRTSPWFDServer *server, guint8 audio_codec) +{ + GstRTSPResult res = GST_RTSP_OK; + GstRTSPWFDServerPrivate *priv = GST_RTSP_WFD_SERVER_GET_PRIVATE(server); + + g_return_val_if_fail (GST_IS_RTSP_WFD_SERVER (server), GST_RTSP_ERROR); + g_return_val_if_fail (priv != NULL, GST_RTSP_ERROR); + + GST_RTSP_WFD_SERVER_LOCK (server); + + priv->audio_codec = audio_codec; + + GST_RTSP_WFD_SERVER_UNLOCK (server); + return res; } diff --git a/packaging/gst-rtsp-server.spec b/packaging/gst-rtsp-server.spec index 30832e8..630bb5a 100644 --- a/packaging/gst-rtsp-server.spec +++ b/packaging/gst-rtsp-server.spec @@ -1,7 +1,7 @@ Name: gst-rtsp-server Summary: Multimedia Framework Library Version: 1.4.5 -Release: 0 +Release: 1 Group: System/Libraries License: LGPLv2+ Source0: %{name}-%{version}.tar.gz -- 2.7.4