From d83bdda139fbf732ff13b7e9de98f2b0a57ee1a0 Mon Sep 17 00:00:00 2001 From: Ali Fardan Date: Thu, 19 Nov 2020 16:04:59 +0300 Subject: fix encode uninitialized strlcat() on string && introduce new uri_string_path() function --- encode.c | 14 ++++++++++---- yuri.c | 23 +++++++++++++++++++++++ yuri.h | 1 + 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/encode.c b/encode.c index daaef32..ae2d05e 100644 --- a/encode.c +++ b/encode.c @@ -17,14 +17,20 @@ uri_encode(struct uri *u) size_t len; len = 1; /* \0 */ - ret = NULL; + ret = realloc(NULL, len); + if (ret == NULL) + return NULL; + ret[0] = '\0'; if (u->scheme) { len += strlen(u->scheme)+1; /* scheme: */ - ret = realloc(NULL, len); - if (ret == NULL) + dup = realloc(ret, len); + if (ret == NULL) { + free(ret); return NULL; - strlcpy(ret, u->scheme, len); + } + ret = dup; + strlcat(ret, u->scheme, len); strlcat(ret, ":", len); } diff --git a/yuri.c b/yuri.c index 3ffcc53..89c2a2f 100644 --- a/yuri.c +++ b/yuri.c @@ -257,6 +257,29 @@ uri_get_path(struct uri *u) return u->path; } +/* + * TODO: cleanup + */ +char * +uri_string_path(struct uri *u) +{ + struct uri *temp; + char *ret; + + temp = uri_new(); + if (temp == NULL) + return NULL; + temp->path = u->path; + temp->npath = u->npath; + + ret = uri_encode(temp); + free(temp); + if (ret == NULL) + return NULL; + + return ret; +} + int uri_get_npath(struct uri *u) { diff --git a/yuri.h b/yuri.h index 1a3fa63..3e33b43 100644 --- a/yuri.h +++ b/yuri.h @@ -43,6 +43,7 @@ const char *uri_get_authority_user(struct uri *); const char *uri_get_authority_host(struct uri *); int uri_get_authority_port(struct uri *); const char **uri_get_path(struct uri *); +char *uri_string_path(struct uri *); int uri_get_npath(struct uri *); const char *uri_get_query(struct uri *); const char *uri_get_fragment(struct uri *); -- cgit 1.4.1-2-gfad0