The size of the returned MULTI_SZ wide domains string was calculated
wrongly. Instead of adding the size of a WCHAR, only the size of a char
was used. As a result, the domains string was stored too short and was
missing the final string terminator.
DHCP assigned DNS server addresses are separated by space, not comma.
These spaces were not replaced by semicolon, as the spec requires.
Github: fixes OpenVPN/openvpn#747
Change-Id: Ie3fcd845344fd0c3ce9a2f99612fb19fe5ebb2f1
Signed-off-by: Heiko Hund <heiko@ist.eigentlich.net>
Acked-by: Lev Stipakov <lstipakov@gmail.com>
Message-Id: <
20250520085513.28213-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31727.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
{
/* This was the last domain */
*pos = '\0';
- *size += 1;
+ *size += one_glyph;
return wcslen(domains) ? NO_ERROR : ERROR_FILE_NOT_FOUND;
}
}
memmove(pos + 1, pos, buf_size - converted_size - one_glyph);
domains[buf_len - 1] = '\0';
*pos = '.';
- *size += 1;
+ *size += one_glyph;
if (!comma)
{
/* Conversion is done */
*(pos + domain_len) = '\0';
- *size += 1;
+ *size += one_glyph;
return NO_ERROR;
}
if (v4_addrs_size || v6_addrs_size)
{
- /* Replace comma-delimters with semicolons, as required by NRPT */
+ /* Replace delimiters with semicolons, as required by NRPT */
for (int j = 0; j < sizeof(data[0].addresses) && data[i].addresses[j]; j++)
{
- if (data[i].addresses[j] == ',')
+ if (data[i].addresses[j] == ',' || data[i].addresses[j] == ' ')
{
data[i].addresses[j] = ';';
}