strerror: repair get_winsock_error()

It would try to read longer than the provided string and crash.

Follow-up to ff74cef5d4
Reported-by: calvin2021y on github
Fixes #12578
Closes #12579
This commit is contained in:
Daniel Stenberg 2023-12-21 17:50:29 +01:00
parent 5d2b0faec2
commit a719be81e9
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -582,11 +582,10 @@ get_winsock_error(int err, char *buf, size_t len)
{
#ifndef CURL_DISABLE_VERBOSE_STRINGS
const char *p;
size_t alen;
#endif
/* 41 bytes is the longest error string */
DEBUGASSERT(len > 41);
if(!len || len < 41)
if(!len)
return NULL;
*buf = '\0';
@ -763,8 +762,9 @@ get_winsock_error(int err, char *buf, size_t len)
default:
return NULL;
}
memcpy(buf, p, len - 1);
buf[len - 1] = '\0';
alen = strlen(p);
if(alen < len)
strcpy(buf, p);
return buf;
#endif
}