Browse Source

strerror: repair get_winsock_error()

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

Follow-up to ff74cef5d4a0cf60106517a1c7384
Reported-by: calvin2021y on github
Fixes #12578
Closes #12579
Daniel Stenberg 4 months ago
parent
commit
a719be81e9
1 changed files with 5 additions and 5 deletions
  1. 5 5
      lib/strerror.c

+ 5 - 5
lib/strerror.c

@@ -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
 }