From c6ae07c6a541e0e96d0040afb62b45dd37711300 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 11 Aug 2025 20:23:05 +0200 Subject: [PATCH] cookie: don't treat the leading slash as trailing If there is only a leading slash in the path, keep that. Also add an assert to make sure the path is never blank. Reported-by: Google Big Sleep Closes #18266 --- lib/cookie.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/cookie.c b/lib/cookie.c index 914a4aca1..b72dd99bc 100644 --- a/lib/cookie.c +++ b/lib/cookie.c @@ -296,9 +296,9 @@ static char *sanitize_cookie_path(const char *cookie_path) /* Let cookie-path be the default-path. */ return strdup("/"); - /* remove trailing slash */ + /* remove trailing slash when path is non-empty */ /* convert /hoge/ to /hoge */ - if(len && cookie_path[len - 1] == '/') + if(len > 1 && cookie_path[len - 1] == '/') len--; return Curl_memdup0(cookie_path, len); @@ -965,7 +965,7 @@ replace_existing(struct Curl_easy *data, clist->spath && co->spath && /* both have paths */ clist->secure && !co->secure && !secure) { size_t cllen; - const char *sep; + const char *sep = NULL; /* * A non-secure cookie may not overlay an existing secure cookie. @@ -974,8 +974,9 @@ replace_existing(struct Curl_easy *data, * "/loginhelper" is ok. */ - sep = strchr(clist->spath + 1, '/'); - + DEBUGASSERT(clist->spath[0]); + if(clist->spath[0]) + sep = strchr(clist->spath + 1, '/'); if(sep) cllen = sep - clist->spath; else -- 2.39.5