From: Jiwan Kim Date: Tue, 13 Jun 2017 07:00:39 +0000 (+0900) Subject: Fix for svace issues X-Git-Tag: accepted/tizen/unified/20170829.053204~30 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6309c02bcbe4592169e03b2b21718e92d1aa2855;hp=4eb8131d6cb4e1de52e65cfd56541975a5c500e0;p=platform%2Fcore%2Fconnectivity%2Fwifi-mesh-manager.git Fix for svace issues --- diff --git a/src/mesh-bridge.c b/src/mesh-bridge.c index 908a495..12c368a 100644 --- a/src/mesh-bridge.c +++ b/src/mesh-bridge.c @@ -65,7 +65,7 @@ int mesh_bridge_create(const char* bridge_name) return MESHD_ERROR_IO_ERROR; } - strncpy(bridge, bridge_name, IFNAMSIZ); + snprintf(bridge, IFNAMSIZ, "%s", bridge_name); #ifdef SIOCBRADDBR val = ioctl(br_fd, SIOCBRADDBR, bridge_name); #else @@ -107,7 +107,7 @@ int mesh_bridge_remove(const char* bridge_name) return MESHD_ERROR_IO_ERROR; } - strncpy(bridge, bridge_name, IFNAMSIZ); + snprintf(bridge, IFNAMSIZ, "%s", bridge_name); #ifdef SIOCBRDELBR val = ioctl(br_fd, SIOCBRDELBR, bridge_name); #else @@ -157,7 +157,7 @@ int mesh_bridge_add_interface(const char* bridge_name, const char* interface) return MESHD_ERROR_IO_ERROR; } - strncpy(ifr.ifr_name, bridge_name, IFNAMSIZ); + snprintf(ifr.ifr_name, IFNAMSIZ, "%s", bridge_name); #ifdef SIOCBRADDIF ifr.ifr_ifindex = if_index; val = ioctl(br_fd, SIOCBRADDIF, &ifr); @@ -210,7 +210,7 @@ int mesh_bridge_del_interface(const char* bridge_name, const char* interface) return MESHD_ERROR_IO_ERROR; } - strncpy(ifr.ifr_name, bridge_name, IFNAMSIZ); + snprintf(ifr.ifr_name, IFNAMSIZ, "%s", bridge_name); #ifdef SIOCBRDELIF ifr.ifr_ifindex = if_index; val = ioctl(br_fd, SIOCBRDELIF, &ifr); diff --git a/src/mesh-gdbus.c b/src/mesh-gdbus.c index e634c48..19c7683 100644 --- a/src/mesh-gdbus.c +++ b/src/mesh-gdbus.c @@ -548,13 +548,16 @@ static void _on_scan_result_destroy(gpointer data) g_free(scan_item->bssid); g_free(scan_item->object_path); } + g_free(scan_item); } static void _on_peer_info_destroy(gpointer data) { mesh_peer_info_s *peer = (mesh_peer_info_s *)data; + if (peer) g_free(peer->address); + g_free(peer); } static void _get_joined_network(mesh_service *service, GVariant *variant) @@ -737,11 +740,10 @@ static void _get_mesh_peers(mesh_service *service, GVariant *variant) static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant) { GVariantIter *peer = NULL; - GVariantIter *property = NULL; - gchar *key = NULL; GVariant *val = NULL; gsize len = 0; GVariant *child; + GVariant *dict = NULL; g_variant_get(variant, "(a(a{sv}))", &peer); while ((child = g_variant_iter_next_value(peer))) { @@ -753,19 +755,22 @@ static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant) return; } - g_variant_get(child, "(a{sv})", &property); - while (g_variant_iter_loop(property, "{sv}", &key, &val)) { - if (strcasecmp(key, "PeerAddress") == 0) { - const char *buf = g_variant_get_string(val, &len); - peer_info->address = g_strdup(buf); - MESH_LOGD(" Address : %s", peer_info->address); - } + /* a{sv} <- (a{sv}) */ + dict = g_variant_get_child_value(child, 0); + val = g_variant_lookup_value(dict, "PeerAddress", NULL); + if (NULL != val) { + const char *buf = g_variant_get_string(val, &len); + peer_info->address = g_strdup(buf); + MESH_LOGD(" Address : %s", peer_info->address); + g_variant_unref(val); + } else { + MESH_LOGE("Unable to get address !"); + g_free(peer_info); + continue; } - /* Last element */ + service->connected_mesh_peers = g_list_prepend(service->connected_mesh_peers, peer_info); - - g_variant_iter_free(property); } g_variant_iter_free(peer); } diff --git a/src/mesh-interface.c b/src/mesh-interface.c index 189fff0..bb63b17 100644 --- a/src/mesh-interface.c +++ b/src/mesh-interface.c @@ -207,16 +207,17 @@ static bool _check_interface_exists(const char* if_name) char* mesh_interface_get_address(const char* if_name) { FILE *pf; - char buf[32]; + char buf[32] = { 0, }; char *result = NULL; - int cnt = 0; snprintf(buf, sizeof(buf), "/sys/class/net/%s/address", if_name); pf = fopen(buf, "r"); if (NULL != pf) { - cnt = fscanf(pf, "%s", buf); - MESH_LOGD("Interface[%s] address[%s] %d", if_name, buf, cnt); - result = g_strdup(buf); + fgets(buf, 31, pf); + MESH_LOGD("Interface[%s] address[%s]", if_name, buf); + + if (strlen(buf) > 0) + result = g_strdup(buf); fclose(pf); } diff --git a/src/mesh-netlink.c b/src/mesh-netlink.c index cce1032..110b0ac 100644 --- a/src/mesh-netlink.c +++ b/src/mesh-netlink.c @@ -510,7 +510,8 @@ static void _on_remove_event_io_handler() static void mac_addr_n2a(char *mac_addr, unsigned char *arg) { - snprintf(mac_addr, MAX_MAC_ADDR_LEN+1, + /* 11:22:33:44:55:66 (Len:17) */ + snprintf(mac_addr, MAX_MAC_ADDR_LEN, "%02X:%02X:%02X:%02X:%02X:%02X", arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]); } @@ -708,7 +709,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) [NL80211_STA_INFO_BSS_PARAM] = { .type = NLA_NESTED }, [NL80211_STA_INFO_RX_DURATION] = { .type = NLA_U64 }, }; - char mac_addr[20], state_name[10], dev[20]; + char mac_addr[MAX_MAC_ADDR_LEN], state_name[10], dev[20]; char *chain; mesh_nl_state *state = (mesh_nl_state *)arg; mesh_station_info_s *station_info = NULL; @@ -865,28 +866,28 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg) nla_get_u8(sinfo[NL80211_STA_INFO_PLINK_STATE]); switch (station_info->mesh_plink) { case LISTEN: - strcpy(state_name, "LISTEN"); + snprintf(state_name, 10, "%s", "LISTEN"); break; case OPN_SNT: - strcpy(state_name, "OPN_SNT"); + snprintf(state_name, 10, "%s", "OPN_SNT"); break; case OPN_RCVD: - strcpy(state_name, "OPN_RCVD"); + snprintf(state_name, 10, "%s", "OPN_RCVD"); break; case CNF_RCVD: - strcpy(state_name, "CNF_RCVD"); + snprintf(state_name, 10, "%s", "CNF_RCVD"); break; case ESTAB: - strcpy(state_name, "ESTAB"); + snprintf(state_name, 10, "%s", "ESTAB"); break; case HOLDING: - strcpy(state_name, "HOLDING"); + snprintf(state_name, 10, "%s", "HOLDING"); break; case BLOCKED: - strcpy(state_name, "BLOCKED"); + snprintf(state_name, 10, "%s", "BLOCKED"); break; default: - strcpy(state_name, "UNKNOWN"); + snprintf(state_name, 10, "%s", "UNKNOWN"); break; } MESH_LOGD(" mesh plink:\t%s", state_name); @@ -1105,7 +1106,7 @@ static int _on_receive_mesh_event(struct nl_msg *msg, void *arg) struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); struct nlattr *tb[NL80211_ATTR_MAX + 1]; char ifname[16] = { 0, }; - char macbuf[6*3]; + char macbuf[MAX_MAC_ADDR_LEN]; NOTUSED(arg); diff --git a/src/mesh-service-interface.c b/src/mesh-service-interface.c index a192bba..aa7e7a9 100644 --- a/src/mesh-service-interface.c +++ b/src/mesh-service-interface.c @@ -279,6 +279,15 @@ static void _on_scan_result_destroy(gpointer data) g_free(scan_item->bssid); g_free(scan_item->object_path); } + g_free(scan_item); +} + +static void _on_peer_info_destroy(gpointer data) +{ + mesh_peer_info_s *peer = (mesh_peer_info_s *)data; + if (peer) + g_free(peer->address); + g_free(peer); } static void _on_station_list_destroy(gpointer data) @@ -416,7 +425,7 @@ static gboolean _meshd_dbus_handle_get_joined_mesh_network(NetMesh *object, mesh_service *service = (mesh_service *)user_data; mesh_network_info_s *joined = NULL; - ret = mesh_request_get_networks(service); + ret = mesh_request_get_joined_network(service); if (MESHD_ERROR_NONE == ret) { joined = service->joined_network; if (joined) { @@ -1079,6 +1088,10 @@ static void _meshd_dbus_deinit(mesh_service *service) g_list_free_full(service->scanned_mesh_network, _on_scan_result_destroy); service->scanned_mesh_network = NULL; + /* Clear connected peers list */ + g_list_free_full(service->connected_mesh_peers, _on_peer_info_destroy); + service->connected_mesh_peers = NULL; + g_free(service->interface_info); service->interface_info = NULL; }