Attention is currently required from: plaisthos.

Hello plaisthos,

I'd like you to do a code review.
Please visit

    http://gerrit.openvpn.net/c/openvpn/+/1457?usp=email

to review the following change.


Change subject: openvpnserv: Fix conversion warnings in interactive.c
......................................................................

openvpnserv: Fix conversion warnings in interactive.c

Mostly DWORD vs. size_t conversions where we have no
choice but to cast.

Change-Id: I864cd4a718886f437b72e93d0286f90fcb73592b
Signed-off-by: Frank Lichtenheld <[email protected]>
---
M src/openvpnserv/interactive.c
1 file changed, 37 insertions(+), 31 deletions(-)



  git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/57/1457/1

diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c
index 9327dfa..8b418ce 100644
--- a/src/openvpnserv/interactive.c
+++ b/src/openvpnserv/interactive.c
@@ -1383,10 +1383,20 @@
     return TRUE;
 }

-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wconversion"
-#endif
+/**
+ * Return correct length for regex value to set for string
+ *
+ */
+static DWORD
+RegWStringLength(PCWSTR string)
+{
+    size_t length = (wcslen(string) + 1) * sizeof(wchar_t);
+    if (length > UINT_MAX)
+    {
+        length = UINT_MAX;
+    }
+    return (DWORD)length;
+}

 /**
  * Prepare DNS domain "SearchList" registry value, so additional
@@ -1413,7 +1423,7 @@
         return TRUE;
     }

-    DWORD size = (wcslen(list) + 1) * sizeof(*list);
+    DWORD size = RegWStringLength(list);
     LSTATUS err = RegSetValueExW(key, L"InitialSearchList", 0, REG_SZ, 
(PBYTE)list, size);
     if (err)
     {
@@ -1474,7 +1484,7 @@
         wcsncpy(list, domains, wcslen(domains) + 1);
     }

-    size = (wcslen(list) + 1) * sizeof(list[0]);
+    size = RegWStringLength(list);
     err = RegSetValueExW(key, L"SearchList", 0, REG_SZ, (PBYTE)list, size);
     if (err)
     {
@@ -1515,7 +1525,7 @@
         goto out;
     }

-    size = (wcslen(list) + 1) * sizeof(list[0]);
+    size = RegWStringLength(list);
     err = RegSetValueExW(key, L"SearchList", 0, REG_SZ, (PBYTE)list, size);
     if (err)
     {
@@ -1579,14 +1589,14 @@
         }

         /* If the search list is back to its initial state reset it */
-        if (wcsncmp(list, initial, wcslen(list)) == 0)
+        if (wcsncmp(list, initial, list_len) == 0)
         {
             ResetDnsSearchDomains(key);
             return;
         }
     }

-    size = (list_len + 1) * sizeof(list[0]);
+    size = RegWStringLength(list);
     err = RegSetValueExW(key, L"SearchList", 0, REG_SZ, (PBYTE)list, size);
     if (err)
     {
@@ -1729,9 +1739,9 @@
  * @param family    internet address family to set the servers for
  * @param value     the value to set the name servers to
  *
- * @return DWORD NO_ERROR on success, a Windows error code otherwise
+ * @return NO_ERROR on success, a Windows error code otherwise
  */
-static DWORD
+static LSTATUS
 SetNameServersValue(PCWSTR itf_id, short family, PCSTR value)
 {
     DWORD err;
@@ -1751,7 +1761,7 @@
         goto out;
     }

-    err = RegSetValueExA(itf, "NameServer", 0, REG_SZ, (PBYTE)value, 
strlen(value) + 1);
+    err = RegSetValueExA(itf, "NameServer", 0, REG_SZ, (PBYTE)value, 
(DWORD)strlen(value) + 1);
     if (err)
     {
         MsgToEventLog(M_SYSERR, L"%S: could not set name servers '%S' for %s 
family %d (%lu)",
@@ -1777,9 +1787,9 @@
  * @param family    internet address family to set the servers for
  * @param addrs     comma separated list of name server addresses
  *
- * @return DWORD NO_ERROR on success, a Windows error code otherwise
+ * @return NO_ERROR on success, a Windows error code otherwise
  */
-static DWORD
+static LSTATUS
 SetNameServers(PCWSTR itf_id, short family, PCSTR addrs)
 {
     return SetNameServersValue(itf_id, family, addrs);
@@ -1793,7 +1803,7 @@
  *
  * @return DWORD NO_ERROR on success, a Windows error code otherwise
  */
-static DWORD
+static LSTATUS
 ResetNameServers(PCWSTR itf_id, short family)
 {
     return SetNameServersValue(itf_id, family, "");
@@ -1807,7 +1817,7 @@
     int addr_len = msg->addr_len;

     /* sanity check */
-    const size_t max_addrs = _countof(msg->addr);
+    const int max_addrs = _countof(msg->addr);
     if (addr_len > max_addrs)
     {
         addr_len = max_addrs;
@@ -1949,7 +1959,7 @@
         short family = families[i];

         /* Create a comma sparated list of addresses of this family */
-        int offset = 0;
+        size_t offset = 0;
         char addr_list[NRPT_ADDR_SIZE * NRPT_ADDR_NUM];
         for (int j = 0; j < NRPT_ADDR_NUM && addresses[j][0]; j++)
         {
@@ -2085,9 +2095,9 @@

             size_t addr_len = strlen(pos);
             pos += addr_len;
-            s -= addr_len;
+            s -= (DWORD)addr_len;
         }
-        s = strlen(addrs) + 1;
+        s = (DWORD)strlen(addrs) + 1;
     }

     if (strchr(addrs, ':'))
@@ -2163,7 +2173,8 @@

     LSTATUS err = ERROR_FILE_NOT_FOUND;
     const DWORD buf_size = *size;
-    const size_t glyph_size = sizeof(*domains);
+    const DWORD glyph_size = sizeof(*domains);
+    const DWORD buf_len = buf_size / glyph_size;
     PWSTR values[] = { L"SearchList", L"Domain", L"DhcpDomainSearchList", 
L"DhcpDomain", NULL };

     for (int i = 0; values[i]; i++)
@@ -2178,7 +2189,6 @@
              *   - convert comma separated list to MULTI_SZ
              */
             PWCHAR pos = domains;
-            const DWORD buf_len = buf_size / glyph_size;
             while (TRUE)
             {
                 /* Terminate the domain at the next comma */
@@ -2188,9 +2198,9 @@
                     *comma = '\0';
                 }

-                size_t domain_len = wcslen(pos);
-                size_t domain_size = domain_len * glyph_size;
-                size_t converted_size = (pos - domains) * glyph_size;
+                DWORD domain_len = (DWORD)wcslen(pos);
+                DWORD domain_size = domain_len * glyph_size;
+                DWORD converted_size = (DWORD)(pos - domains) * glyph_size;

                 /* Ignore itf domains which match a pushed search domain */
                 if (ListContainsDomain(search_domains, pos, domain_len))
@@ -2216,7 +2226,7 @@
                 domain_size += glyph_size;

                 /* Space for the terminating zeros */
-                size_t extra_size = 2 * glyph_size;
+                const DWORD extra_size = 2 * glyph_size;
 
                 /* Check for enough space to convert this domain */
                 if (converted_size + domain_size + extra_size > buf_size)
@@ -2450,7 +2460,7 @@

     /* Set DNS Server address */
     err = RegSetValueExA(rule_key, "GenericDNSServers", 0, REG_SZ, 
(PBYTE)address,
-                         strlen(address) + 1);
+                         (DWORD)strlen(address) + 1);
     if (err)
     {
         goto out;
@@ -2571,7 +2581,7 @@
     if (domains[0])
     {
         size_t domains_len = strlen(domains);
-        dom_size = domains_len + 2; /* len + the trailing NULs */
+        dom_size = (DWORD)domains_len + 2; /* len + the trailing NULs */

         wide_domains = utf8to16_size(domains, dom_size);
         dom_size *= sizeof(*wide_domains);
@@ -2628,10 +2638,6 @@
     return err;
 }

-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
 /**
  * Return the registry key where NRPT rules are stored
  *

--
To view, visit http://gerrit.openvpn.net/c/openvpn/+/1457?usp=email
To unsubscribe, or for help writing mail filters, visit 
http://gerrit.openvpn.net/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: I864cd4a718886f437b72e93d0286f90fcb73592b
Gerrit-Change-Number: 1457
Gerrit-PatchSet: 1
Gerrit-Owner: flichtenheld <[email protected]>
Gerrit-Reviewer: plaisthos <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: plaisthos <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to