Security Alert Using this function incorrectly can compromise the security
of your application. This function uses structured exception handling (SEH) to catch
access violations and other errors. When this function catches SEH errors, it returns
NULL without null-terminating the string and without notifying the
caller of the error. The caller is not safe to assume that insufficient space is
the error condition.
If the buffer pointed to by lpString1 is not large
enough to contain the copied string, a buffer overrun can occur. When copying an entire
string, note that sizeof returns the number of bytes.
For example, if lpString1 points to a buffer
szString1 which is declared as
TCHAR szString[100], then sizeof(szString1) gives the size of
the buffer in bytes rather than WCHAR, which could lead to a buffer
overflow for the Unicode version of the function.
Buffer overflow situations are the cause
of many security problems in applications and can cause a denial of service attack against
the application if an access violation occurs. In the worst case, a buffer overrun may
allow an attacker to inject executable code into your process, especially if
lpString1 is a stack-based buffer.
Using sizeof(szString1)/sizeof(szString1[0])
gives the proper size of the buffer.
Consider using StringCchCopy instead; use either
StringCchCopy(buffer, src, sizeof(buffer)/sizeof(buffer[0]);,
being aware that buffer must not be a pointer or
use StringCchCopy(buffer, src, ARRAYSIZE(buffer);,
being aware that, when copying to a pointer, the caller is responsible for
passing in the size of the pointed-to memory in characters.
Review Security Considerations: Windows User Interface before continuing.
TCHAR chBuffer[512];
lstrcpyn(chBuffer, "abcdefghijklmnop", 4);