On Sun, 14 Jun 2015 14:58:36 +1000, Alistair Leslie-Hughes wrote:
- ret = SQLGetPrivateProfileStringW(sect, entry, string, retval, cbRetBuffer, file);
- if(ret)
- {
WideCharToMultiByte(CP_ACP, 0, retval, -1, RetBuffer, cbRetBuffer, NULL, NULL);
RetBuffer[ret] = 0;
- }
If retval is null terminated, you do not need RetBuffer[ret] = 0;.
The -1 in WideCharToMultiByte means the function calculates the length of the input string, including any null terminating character. If the input string is null terminated, the output string is also null terminated. So, if this is the case, you are actually null-terminating twice and, depending on the size of cbRetBuffer, the second null termination may be out of bounds.
If retval isn't null terminated, you should use the return value of WideCharToMultiByte (the number of bytes written to RetBuffer) instead of 'ret'.