mirror of
https://github.com/curl/curl.git
synced 2025-04-18 16:30:45 +08:00
strdup: do Curl_strndup without strncpy
To avoid (false positive) gcc-13 compiler warnings. Follow-up to 4855debd8a2c1cb Assisted-by: Jay Satiro Reported-by: Viktor Szakats Fixes #12258
This commit is contained in:
parent
46878b9e3f
commit
ac57e69b58
17
lib/http.c
17
lib/http.c
@ -4608,17 +4608,6 @@ out:
|
||||
return result;
|
||||
}
|
||||
|
||||
/* simple implementation of strndup(), which isn't portable */
|
||||
static char *my_strndup(const char *ptr, size_t len)
|
||||
{
|
||||
char *copy = malloc(len + 1);
|
||||
if(!copy)
|
||||
return NULL;
|
||||
memcpy(copy, ptr, len);
|
||||
copy[len] = '\0';
|
||||
return copy;
|
||||
}
|
||||
|
||||
CURLcode Curl_http_req_make(struct httpreq **preq,
|
||||
const char *method, size_t m_len,
|
||||
const char *scheme, size_t s_len,
|
||||
@ -4637,17 +4626,17 @@ CURLcode Curl_http_req_make(struct httpreq **preq,
|
||||
goto out;
|
||||
memcpy(req->method, method, m_len);
|
||||
if(scheme) {
|
||||
req->scheme = my_strndup(scheme, s_len);
|
||||
req->scheme = Curl_strndup(scheme, s_len);
|
||||
if(!req->scheme)
|
||||
goto out;
|
||||
}
|
||||
if(authority) {
|
||||
req->authority = my_strndup(authority, a_len);
|
||||
req->authority = Curl_strndup(authority, a_len);
|
||||
if(!req->authority)
|
||||
goto out;
|
||||
}
|
||||
if(path) {
|
||||
req->path = my_strndup(path, p_len);
|
||||
req->path = Curl_strndup(path, p_len);
|
||||
if(!req->path)
|
||||
goto out;
|
||||
}
|
||||
|
12
lib/strdup.c
12
lib/strdup.c
@ -104,17 +104,21 @@ void *Curl_memdup(const void *src, size_t length)
|
||||
* Curl_strndup(source, length)
|
||||
*
|
||||
* Copies the 'source' string to a newly allocated buffer (that is returned).
|
||||
* Copies not more than 'length' bytes then adds a null terminator.
|
||||
* Copies not more than 'length' bytes (up to a null terminator) then adds a
|
||||
* null terminator.
|
||||
*
|
||||
* Returns the new pointer or NULL on failure.
|
||||
*
|
||||
***************************************************************************/
|
||||
void *Curl_strndup(const void *src, size_t length)
|
||||
void *Curl_strndup(const char *src, size_t length)
|
||||
{
|
||||
char *buf = malloc(length + 1);
|
||||
char *buf = memchr(src, '\0', length);
|
||||
if(buf)
|
||||
length = buf - src;
|
||||
buf = malloc(length + 1);
|
||||
if(!buf)
|
||||
return NULL;
|
||||
strncpy(buf, src, length);
|
||||
memcpy(buf, src, length);
|
||||
buf[length] = 0;
|
||||
return buf;
|
||||
}
|
||||
|
@ -33,6 +33,6 @@ wchar_t* Curl_wcsdup(const wchar_t* src);
|
||||
#endif
|
||||
void *Curl_memdup(const void *src, size_t buffer_length);
|
||||
void *Curl_saferealloc(void *ptr, size_t size);
|
||||
void *Curl_strndup(const void *src, size_t length);
|
||||
void *Curl_strndup(const char *src, size_t length);
|
||||
|
||||
#endif /* HEADER_CURL_STRDUP_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user