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