OSDN Git Service

Replace strncpy with strlcpy in HID and PAN code
authorHemant Gupta <hemantg@codeaurora.org>
Mon, 12 Jun 2017 08:57:10 +0000 (14:27 +0530)
committerHansong Zhang <hsz@google.com>
Fri, 1 Dec 2017 21:01:11 +0000 (21:01 +0000)
Test: HID and PAN functionality work fine

Bug: 62525262
Change-Id: Icd4f9073a2356f3c8ecc4a23c22388b3509974e9

bta/hd/bta_hd_api.cc
bta/hd/bta_hd_int.h
btif/co/bta_hh_co.cc
btif/src/btif_pan.cc

index aab5120..5459747 100644 (file)
@@ -104,23 +104,20 @@ extern void BTA_HdRegisterApp(tBTA_HD_APP_INFO* p_app_info,
   p_buf->hdr.event = BTA_HD_API_REGISTER_APP_EVT;
 
   if (p_app_info->p_name) {
-    strncpy(p_buf->name, p_app_info->p_name, BTA_HD_APP_NAME_LEN);
-    p_buf->name[BTA_HD_APP_NAME_LEN] = '\0';
+    strlcpy(p_buf->name, p_app_info->p_name, BTA_HD_APP_NAME_LEN);
   } else {
     p_buf->name[0] = '\0';
   }
 
   if (p_app_info->p_description) {
-    strncpy(p_buf->description, p_app_info->p_description,
+    strlcpy(p_buf->description, p_app_info->p_description,
             BTA_HD_APP_DESCRIPTION_LEN);
-    p_buf->description[BTA_HD_APP_DESCRIPTION_LEN] = '\0';
   } else {
     p_buf->description[0] = '\0';
   }
 
   if (p_app_info->p_provider) {
-    strncpy(p_buf->provider, p_app_info->p_provider, BTA_HD_APP_PROVIDER_LEN);
-    p_buf->provider[BTA_HD_APP_PROVIDER_LEN] = '\0';
+    strlcpy(p_buf->provider, p_app_info->p_provider, BTA_HD_APP_PROVIDER_LEN);
   } else {
     p_buf->provider[0] = '\0';
   }
index 0105375..4a48254 100644 (file)
@@ -77,9 +77,9 @@ typedef struct {
 
 typedef struct {
   BT_HDR hdr;
-  char name[BTA_HD_APP_NAME_LEN + 1];
-  char description[BTA_HD_APP_DESCRIPTION_LEN + 1];
-  char provider[BTA_HD_APP_PROVIDER_LEN + 1];
+  char name[BTA_HD_APP_NAME_LEN];
+  char description[BTA_HD_APP_DESCRIPTION_LEN];
+  char provider[BTA_HD_APP_PROVIDER_LEN];
   uint8_t subclass;
   uint16_t d_len;
   uint8_t d_data[BTA_HD_APP_DESCRIPTOR_LEN];
index 937ccbb..2f507f9 100644 (file)
@@ -473,7 +473,7 @@ void bta_hh_co_send_hid_info(btif_hh_device_t* p_dev, const char* dev_name,
   // Create and send hid descriptor to kernel
   memset(&ev, 0, sizeof(ev));
   ev.type = UHID_CREATE;
-  strncpy((char*)ev.u.create.name, dev_name, sizeof(ev.u.create.name) - 1);
+  strlcpy((char*)ev.u.create.name, dev_name, sizeof(ev.u.create.name));
   snprintf((char*)ev.u.create.uniq, sizeof(ev.u.create.uniq), "%s",
            p_dev->bd_addr.ToString().c_str());
   ev.u.create.rd_size = dscp_len;
index 217c0e6..e1e6b18 100644 (file)
@@ -286,7 +286,7 @@ static int tap_if_up(const char* devname, const RawAddress* addr) {
 
   // set mac addr
   memset(&ifr, 0, sizeof(ifr));
-  strncpy(ifr.ifr_name, devname, IFNAMSIZ - 1);
+  strlcpy(ifr.ifr_name, devname, IFNAMSIZ);
   err = ioctl(sk, SIOCGIFHWADDR, &ifr);
   if (err < 0) {
     BTIF_TRACE_ERROR(
@@ -296,7 +296,7 @@ static int tap_if_up(const char* devname, const RawAddress* addr) {
     return -1;
   }
 
-  strncpy(ifr.ifr_name, devname, IFNAMSIZ - 1);
+  strlcpy(ifr.ifr_name, devname, IFNAMSIZ);
   memcpy(ifr.ifr_hwaddr.sa_data, addr->address, 6);
 
   /* The IEEE has specified that the most significant bit of the most
@@ -324,7 +324,7 @@ static int tap_if_up(const char* devname, const RawAddress* addr) {
 
   // bring it up
   memset(&ifr, 0, sizeof(ifr));
-  strncpy(ifr.ifr_name, devname, IF_NAMESIZE - 1);
+  strlcpy(ifr.ifr_name, devname, IF_NAMESIZE);
 
   ifr.ifr_flags |= IFF_UP;
   ifr.ifr_flags |= IFF_MULTICAST;
@@ -350,7 +350,7 @@ static int tap_if_down(const char* devname) {
   if (sk < 0) return -1;
 
   memset(&ifr, 0, sizeof(ifr));
-  strncpy(ifr.ifr_name, devname, IF_NAMESIZE - 1);
+  strlcpy(ifr.ifr_name, devname, IF_NAMESIZE);
 
   ifr.ifr_flags &= ~IFF_UP;
 
@@ -387,7 +387,7 @@ int btpan_tap_open() {
   memset(&ifr, 0, sizeof(ifr));
   ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
 
-  strncpy(ifr.ifr_name, TAP_IF_NAME, IFNAMSIZ);
+  strlcpy(ifr.ifr_name, TAP_IF_NAME, IFNAMSIZ);
 
   /* try to create the device */
   err = ioctl(fd, TUNSETIFF, (void*)&ifr);