mirror of
https://github.com/jorisvink/kore
synced 2025-03-09 20:49:01 -04:00
Improve kore_strlcpy().
Make it return the original length of the input string so the caller can check for truncation. Also guard against len being 0 as this would not do anything with the destination string (not even NUL terminate it).
This commit is contained in:
parent
589c7667be
commit
27acc51241
@ -522,7 +522,7 @@ char *kore_time_to_date(time_t);
|
||||
char *kore_strdup(const char *);
|
||||
void kore_log(int, const char *, ...);
|
||||
u_int64_t kore_strtonum64(const char *, int, int *);
|
||||
void kore_strlcpy(char *, const char *, size_t);
|
||||
size_t kore_strlcpy(char *, const char *, const size_t);
|
||||
void kore_server_disconnect(struct connection *);
|
||||
int kore_split_string(char *, char *, char **, size_t);
|
||||
void kore_strip_chars(char *, const char, char **);
|
||||
|
@ -101,7 +101,7 @@ kore_accesslog_write(const void *data, u_int32_t len)
|
||||
|
||||
if (inet_ntop(logpacket.addrtype, &(logpacket.addr),
|
||||
addr, sizeof(addr)) == NULL)
|
||||
kore_strlcpy(addr, "unknown", sizeof(addr));
|
||||
(void)kore_strlcpy(addr, "unknown", sizeof(addr));
|
||||
|
||||
time(&now);
|
||||
tbuf = kore_time_to_date(now);
|
||||
@ -150,14 +150,21 @@ kore_accesslog(struct http_request *req)
|
||||
logpacket.worker_id = worker->id;
|
||||
logpacket.worker_cpu = worker->cpu;
|
||||
logpacket.time_req = req->total;
|
||||
kore_strlcpy(logpacket.host, req->host, sizeof(logpacket.host));
|
||||
kore_strlcpy(logpacket.path, req->path, sizeof(logpacket.path));
|
||||
|
||||
if (kore_strlcpy(logpacket.host,
|
||||
req->host, sizeof(logpacket.host)) >= sizeof(logpacket.host))
|
||||
kore_log(LOG_NOTICE, "kore_accesslog: host truncated");
|
||||
|
||||
if (kore_strlcpy(logpacket.path,
|
||||
req->path, sizeof(logpacket.path)) >= sizeof(logpacket.path))
|
||||
kore_log(LOG_NOTICE, "kore_accesslog: path truncated");
|
||||
|
||||
if (req->agent != NULL) {
|
||||
kore_strlcpy(logpacket.agent,
|
||||
req->agent, sizeof(logpacket.agent));
|
||||
if (kore_strlcpy(logpacket.agent, req->agent,
|
||||
sizeof(logpacket.agent)) >= sizeof(logpacket.agent))
|
||||
kore_log(LOG_NOTICE, "kore_accesslog: agent truncated");
|
||||
} else {
|
||||
kore_strlcpy(logpacket.agent, "unknown",
|
||||
(void)kore_strlcpy(logpacket.agent, "unknown",
|
||||
sizeof(logpacket.agent));
|
||||
}
|
||||
|
||||
|
@ -122,7 +122,7 @@ kore_strdup(const char *str)
|
||||
|
||||
len = strlen(str) + 1;
|
||||
nstr = kore_malloc(len);
|
||||
kore_strlcpy(nstr, str, len);
|
||||
(void)kore_strlcpy(nstr, str, len);
|
||||
|
||||
return (nstr);
|
||||
}
|
||||
|
16
src/utils.c
16
src/utils.c
@ -81,7 +81,7 @@ kore_log(int prio, const char *fmt, ...)
|
||||
(void)snprintf(tmp, sizeof(tmp), "wrk %d", worker->id);
|
||||
#if !defined(KORE_NO_TLS)
|
||||
if (worker->id == KORE_WORKER_KEYMGR)
|
||||
kore_strlcpy(tmp, "keymgr", sizeof(tmp));
|
||||
(void)kore_strlcpy(tmp, "keymgr", sizeof(tmp));
|
||||
#endif
|
||||
if (foreground)
|
||||
printf("[%s]: %s\n", tmp, buf);
|
||||
@ -95,13 +95,16 @@ kore_log(int prio, const char *fmt, ...)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
kore_strlcpy(char *dst, const char *src, size_t len)
|
||||
size_t
|
||||
kore_strlcpy(char *dst, const char *src, const size_t len)
|
||||
{
|
||||
char *d = dst;
|
||||
const char *s = src;
|
||||
const char *end = dst + len - 1;
|
||||
|
||||
if (len == 0)
|
||||
fatal("kore_strlcpy: len == 0");
|
||||
|
||||
while ((*d = *s) != '\0') {
|
||||
if (d == end) {
|
||||
*d = '\0';
|
||||
@ -111,6 +114,11 @@ kore_strlcpy(char *dst, const char *src, size_t len)
|
||||
d++;
|
||||
s++;
|
||||
}
|
||||
|
||||
while (*s != '\0')
|
||||
s++;
|
||||
|
||||
return (s - src);
|
||||
}
|
||||
|
||||
int
|
||||
@ -416,7 +424,7 @@ kore_base64_encode(u_int8_t *data, u_int32_t len, char **out)
|
||||
|
||||
pdata = kore_buf_release(res, &plen);
|
||||
*out = kore_malloc(plen + 1);
|
||||
kore_strlcpy(*out, (char *)pdata, plen + 1);
|
||||
(void)kore_strlcpy(*out, (char *)pdata, plen + 1);
|
||||
kore_mem_free(pdata);
|
||||
|
||||
return (KORE_RESULT_OK);
|
||||
|
Loading…
x
Reference in New Issue
Block a user