Hi,
This looks good now.
The v1 of this patch and main review comments are in a different thread:
https://sourceforge.net/p/openvpn/mailman/openvpn-devel/
thread/20171010231130.6832-12-simon%40rozman.si/#msg36071613
On Sun, Dec 3, 2017 at 3:30 PM, Simon Rozman <simon@rozman.si> wrote:
> Data size arithmetic was reviewed according to 64-bit MSVC complaints.
>
> The warnings were addressed by migrating to size_t, rewriting the code,
> or silencing the warnings by an explicit cast where appropriate.
> ---
> src/openvpnserv/automatic.c | 17 ++++++-----------
> src/openvpnserv/interactive.c | 12 ++++++------
> 2 files changed, 12 insertions(+), 17 deletions(-)
>
> diff --git a/src/openvpnserv/automatic.c b/src/openvpnserv/automatic.c
> index 75c3be2..6f82b4e 100644
> --- a/src/openvpnserv/automatic.c
> +++ b/src/openvpnserv/automatic.c
> @@ -115,25 +115,20 @@ close_if_open(HANDLE h)
> static bool
> match(const WIN32_FIND_DATA *find, LPCTSTR ext)
> {
> - int i;
> -
> if (find->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
> {
> return false;
> }
>
> - if (!_tcslen(ext))
> + if (*ext == TEXT('\0'))
> {
> return true;
}
>
Empty extension matching all files is somewhat strange but that's the
original behaviour (unlike I initially thought), and is preserved by the
patch.
>
> - i = _tcslen(find->cFileName) - _tcslen(ext) - 1;
> - if (i < 1)
> - {
> - return false;
> - }
> + /* find the pointer to that last '.' in filename and match ext
> against the rest */
>
> - return find->cFileName[i] == '.' && !_tcsicmp(find->cFileName + i +
> 1, ext);
> + const TCHAR *p = _tcsrchr(find->cFileName, TEXT('.'));
> + return p && p != find->cFileName && _tcsicmp(p + 1, ext) == 0;
> }
>
> /*
> @@ -142,14 +137,14 @@ match(const WIN32_FIND_DATA *find, LPCTSTR ext)
> static bool
> modext(LPTSTR dest, int size, LPCTSTR src, LPCTSTR newext)
> {
> - int i;
> + size_t i;
>
> if (size > 0 && (_tcslen(src) + 1) <= size)
> {
> _tcscpy(dest, src);
> dest [size - 1] = TEXT('\0');
> i = _tcslen(dest);
> - while (--i >= 0)
> + while (i-- > 0)
> {
> if (dest[i] == TEXT('\\'))
> {
> diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c
> index ed4603e..5d58ceb 100644
> --- a/src/openvpnserv/interactive.c
> +++ b/src/openvpnserv/interactive.c
> @@ -280,7 +280,7 @@ ReturnProcessId(HANDLE pipe, DWORD pid, DWORD count,
> LPHANDLE events)
> swprintf(buf, _countof(buf), L"0x%08x\n0x%08x\n%s", 0, pid, msg);
> buf[_countof(buf) - 1] = '\0';
>
> - WritePipeAsync(pipe, buf, wcslen(buf) * 2, count, events);
> + WritePipeAsync(pipe, buf, (DWORD)(wcslen(buf) * 2), count, events);
> }
>
> static VOID
> @@ -308,7 +308,7 @@ ReturnError(HANDLE pipe, DWORD error, LPCWSTR func,
> DWORD count, LPHANDLE events
> L"0x%1!08x!\n%2!s!\n%3!s!", 0, 0,
> (LPWSTR) &result, 0, (va_list *) args);
>
> - WritePipeAsync(pipe, result, wcslen(result) * 2, count, events);
> + WritePipeAsync(pipe, result, (DWORD)(wcslen(result) * 2), count,
> events);
> #ifdef UNICODE
> MsgToEventLog(MSG_FLAGS_ERROR, result);
> #else
> @@ -452,10 +452,10 @@ out:
> static BOOL
> GetStartupData(HANDLE pipe, STARTUP_DATA *sud)
> {
> - size_t len;
> + size_t size, len;
> BOOL ret = FALSE;
> WCHAR *data = NULL;
> - DWORD size, bytes, read;
> + DWORD bytes, read;
>
> bytes = PeekNamedPipeAsync(pipe, 1, &exit_event);
> if (bytes == 0)
> @@ -1051,7 +1051,7 @@ netsh_dns_cmd(const wchar_t *action, const wchar_t
> *proto, const wchar_t *if_nam
> const wchar_t *fmt = L"netsh interface %s %s dns \"%s\" %s";
>
> /* max cmdline length in wchars -- include room for worst case and
> some */
> - int ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(addr) + 32 + 1;
> + size_t ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(addr) + 32 +
> 1;
> wchar_t *cmdline = malloc(ncmdline*sizeof(wchar_t));
> if (!cmdline)
> {
> @@ -1571,7 +1571,7 @@ RunOpenvpn(LPVOID p)
> {
> DWORD written;
> WideCharToMultiByte(CP_UTF8, 0, sud.std_input, -1, input,
> input_size, NULL, NULL);
> - WriteFile(stdin_write, input, strlen(input), &written, NULL);
> + WriteFile(stdin_write, input, (DWORD)strlen(input), &written,
> NULL);
> free(input);
> }
>
Cleaner and shorter code and should silence some pesky MSVC
warnings.
Acked-by: Selva Nair <selva.nair@gmail.com>
<div dir="ltr">Hi,<div><br></div><div>This looks good now.</div><div><br></div><div>The v1 of this patch and main review comments are in a different thread:<br></div><div><a href="https://sourceforge.net/p/openvpn/mailman/openvpn-devel/thread/20171010231130.6832-12-simon%40rozman.si/#msg36071613" target="_blank">https://sourceforge.net/p/<wbr>openvpn/mailman/openvpn-devel/<wbr>thread/20171010231130.6832-12-<wbr>simon%40rozman.si/#msg36071613</a><br></div><div><br></div><div><div class="gmail_extra"><div class="gmail_quote">On Sun, Dec 3, 2017 at 3:30 PM, Simon Rozman <span dir="ltr"><<a href="mailto:simon@rozman.si" target="_blank">simon@rozman.si</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_6898804296425451684gmail-">Data size arithmetic was reviewed according to 64-bit MSVC complaints.<br>
<br>
The warnings were addressed by migrating to size_t, rewriting the code,<br>
or silencing the warnings by an explicit cast where appropriate.<br>
---<br>
</span> src/openvpnserv/automatic.c | 17 ++++++-----------<br>
src/openvpnserv/interactive.c | 12 ++++++------<br>
2 files changed, 12 insertions(+), 17 deletions(-)<br>
<br>
diff --git a/src/openvpnserv/automatic.c b/src/openvpnserv/automatic.c<br>
index 75c3be2..6f82b4e 100644<br>
<span class="m_6898804296425451684gmail-">--- a/src/openvpnserv/automatic.c<br>
+++ b/src/openvpnserv/automatic.c<br>
@@ -115,25 +115,20 @@ close_if_open(HANDLE h)<br>
static bool<br>
match(const WIN32_FIND_DATA *find, LPCTSTR ext)<br>
{<br>
- int i;<br>
-<br>
if (find->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)<br>
{<br>
return false;<br>
}<br>
<br>
- if (!_tcslen(ext))<br>
</span><span class="m_6898804296425451684gmail-">+ if (*ext == TEXT('\0'))<br>
{<br>
</span> return true; </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="m_6898804296425451684gmail-"> }<br></span></blockquote><div><br></div><div>Empty extension matching all files is somewhat strange but that's the</div><div>original behaviour (unlike I initially thought), and is preserved by the patch.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_6898804296425451684gmail-">
<br>
- i = _tcslen(find->cFileName) - _tcslen(ext) - 1;<br>
- if (i < 1)<br>
</span><span class="m_6898804296425451684gmail-">- {<br>
- return false;<br>
- }<br>
</span><span class="m_6898804296425451684gmail-">+ /* find the pointer to that last '.' in filename and match ext against the rest */<br>
<br>
- return find->cFileName[i] == '.' && !_tcsicmp(find->cFileName + i + 1, ext);<br>
</span><div><div class="m_6898804296425451684gmail-h5">+ const TCHAR *p = _tcsrchr(find->cFileName, TEXT('.'));<br>
+ return p && p != find->cFileName && _tcsicmp(p + 1, ext) == 0;<br>
}<br>
<br>
/*<br>
@@ -142,14 +137,14 @@ match(const WIN32_FIND_DATA *find, LPCTSTR ext)<br>
static bool<br>
modext(LPTSTR dest, int size, LPCTSTR src, LPCTSTR newext)<br>
{<br>
- int i;<br>
+ size_t i;<br>
<br>
if (size > 0 && (_tcslen(src) + 1) <= size)<br>
{<br>
_tcscpy(dest, src);<br>
dest [size - 1] = TEXT('\0');<br>
i = _tcslen(dest);<br>
- while (--i >= 0)<br>
+ while (i-- > 0)<br>
{<br>
if (dest[i] == TEXT('\\'))<br>
{<br>
diff --git a/src/openvpnserv/interactive.<wbr>c b/src/openvpnserv/interactive.<wbr>c<br>
index ed4603e..5d58ceb 100644<br>
--- a/src/openvpnserv/interactive.<wbr>c<br>
+++ b/src/openvpnserv/interactive.<wbr>c<br>
@@ -280,7 +280,7 @@ ReturnProcessId(HANDLE pipe, DWORD pid, DWORD count, LPHANDLE events)<br>
swprintf(buf, _countof(buf), L"0x%08x\n0x%08x\n%s", 0, pid, msg);<br>
buf[_countof(buf) - 1] = '\0';<br>
<br>
- WritePipeAsync(pipe, buf, wcslen(buf) * 2, count, events);<br>
+ WritePipeAsync(pipe, buf, (DWORD)(wcslen(buf) * 2), count, events);<br>
}<br>
<br>
static VOID<br>
@@ -308,7 +308,7 @@ ReturnError(HANDLE pipe, DWORD error, LPCWSTR func, DWORD count, LPHANDLE events<br>
L"0x%1!08x!\n%2!s!\n%3!s!", 0, 0,<br>
(LPWSTR) &result, 0, (va_list *) args);<br>
<br>
- WritePipeAsync(pipe, result, wcslen(result) * 2, count, events);<br>
+ WritePipeAsync(pipe, result, (DWORD)(wcslen(result) * 2), count, events);<br>
#ifdef UNICODE<br>
MsgToEventLog(MSG_FLAGS_<wbr>ERROR, result);<br>
#else<br>
@@ -452,10 +452,10 @@ out:<br>
static BOOL<br>
GetStartupData(HANDLE pipe, STARTUP_DATA *sud)<br>
{<br>
- size_t len;<br>
+ size_t size, len;<br>
BOOL ret = FALSE;<br>
WCHAR *data = NULL;<br>
- DWORD size, bytes, read;<br>
+ DWORD bytes, read;<br>
<br>
bytes = PeekNamedPipeAsync(pipe, 1, &exit_event);<br>
if (bytes == 0)<br>
@@ -1051,7 +1051,7 @@ netsh_dns_cmd(const wchar_t *action, const wchar_t *proto, const wchar_t *if_nam<br>
const wchar_t *fmt = L"netsh interface %s %s dns \"%s\" %s";<br>
<br>
/* max cmdline length in wchars -- include room for worst case and some */<br>
- int ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(addr) + 32 + 1;<br>
+ size_t ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(addr) + 32 + 1;<br>
wchar_t *cmdline = malloc(ncmdline*sizeof(wchar_t<wbr>));<br>
if (!cmdline)<br>
{<br>
@@ -1571,7 +1571,7 @@ RunOpenvpn(LPVOID p)<br>
{<br>
DWORD written;<br>
WideCharToMultiByte(CP_UTF8, 0, sud.std_input, -1, input, input_size, NULL, NULL);<br>
- WriteFile(stdin_write, input, strlen(input), &written, NULL);<br>
+ WriteFile(stdin_write, input, (DWORD)strlen(input), &written, NULL);<br>
free(input);<br>
}<br></div></div></blockquote><div><br></div><div>Cleaner and shorter code and should silence some pesky MSVC</div><div>warnings.</div><div><br></div><div>Acked-by: Selva Nair <<a href="mailto:selva.nair@gmail.com" target="_blank">selva.nair@gmail.com</a>></div></div></div></div></div>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
@@ -115,25 +115,20 @@ close_if_open(HANDLE h)
static bool
match(const WIN32_FIND_DATA *find, LPCTSTR ext)
{
- int i;
-
if (find->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
return false;
}
- if (!_tcslen(ext))
+ if (*ext == TEXT('\0'))
{
return true;
}
- i = _tcslen(find->cFileName) - _tcslen(ext) - 1;
- if (i < 1)
- {
- return false;
- }
+ /* find the pointer to that last '.' in filename and match ext against the rest */
- return find->cFileName[i] == '.' && !_tcsicmp(find->cFileName + i + 1, ext);
+ const TCHAR *p = _tcsrchr(find->cFileName, TEXT('.'));
+ return p && p != find->cFileName && _tcsicmp(p + 1, ext) == 0;
}
/*
@@ -142,14 +137,14 @@ match(const WIN32_FIND_DATA *find, LPCTSTR ext)
static bool
modext(LPTSTR dest, int size, LPCTSTR src, LPCTSTR newext)
{
- int i;
+ size_t i;
if (size > 0 && (_tcslen(src) + 1) <= size)
{
_tcscpy(dest, src);
dest [size - 1] = TEXT('\0');
i = _tcslen(dest);
- while (--i >= 0)
+ while (i-- > 0)
{
if (dest[i] == TEXT('\\'))
{
@@ -280,7 +280,7 @@ ReturnProcessId(HANDLE pipe, DWORD pid, DWORD count, LPHANDLE events)
swprintf(buf, _countof(buf), L"0x%08x\n0x%08x\n%s", 0, pid, msg);
buf[_countof(buf) - 1] = '\0';
- WritePipeAsync(pipe, buf, wcslen(buf) * 2, count, events);
+ WritePipeAsync(pipe, buf, (DWORD)(wcslen(buf) * 2), count, events);
}
static VOID
@@ -308,7 +308,7 @@ ReturnError(HANDLE pipe, DWORD error, LPCWSTR func, DWORD count, LPHANDLE events
L"0x%1!08x!\n%2!s!\n%3!s!", 0, 0,
(LPWSTR) &result, 0, (va_list *) args);
- WritePipeAsync(pipe, result, wcslen(result) * 2, count, events);
+ WritePipeAsync(pipe, result, (DWORD)(wcslen(result) * 2), count, events);
#ifdef UNICODE
MsgToEventLog(MSG_FLAGS_ERROR, result);
#else
@@ -452,10 +452,10 @@ out:
static BOOL
GetStartupData(HANDLE pipe, STARTUP_DATA *sud)
{
- size_t len;
+ size_t size, len;
BOOL ret = FALSE;
WCHAR *data = NULL;
- DWORD size, bytes, read;
+ DWORD bytes, read;
bytes = PeekNamedPipeAsync(pipe, 1, &exit_event);
if (bytes == 0)
@@ -1051,7 +1051,7 @@ netsh_dns_cmd(const wchar_t *action, const wchar_t *proto, const wchar_t *if_nam
const wchar_t *fmt = L"netsh interface %s %s dns \"%s\" %s";
/* max cmdline length in wchars -- include room for worst case and some */
- int ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(addr) + 32 + 1;
+ size_t ncmdline = wcslen(fmt) + wcslen(if_name) + wcslen(addr) + 32 + 1;
wchar_t *cmdline = malloc(ncmdline*sizeof(wchar_t));
if (!cmdline)
{
@@ -1571,7 +1571,7 @@ RunOpenvpn(LPVOID p)
{
DWORD written;
WideCharToMultiByte(CP_UTF8, 0, sud.std_input, -1, input, input_size, NULL, NULL);
- WriteFile(stdin_write, input, strlen(input), &written, NULL);
+ WriteFile(stdin_write, input, (DWORD)strlen(input), &written, NULL);
free(input);
}