diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2024-12-31 11:52:44 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2024-12-31 11:52:44 +0000 |
| commit | e0eb28e36b05121a8e71b74da98f609f5439d390 (patch) | |
| tree | 6ebe33747632a652117faaa85bfc90b80ce6e279 | |
| parent | 228a00c9ac7c9f8a31eecbe69851c8a9c9a23b52 (diff) | |
| download | tipidee-e0eb28e36b05121a8e71b74da98f609f5439d390.tar.gz | |
Fix AUTH_TYPE off-by-one
Signed-off-by: Laurent Bercot <ska@appnovation.com>
| -rw-r--r-- | src/tipideed/cgi.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/tipideed/cgi.c b/src/tipideed/cgi.c index 4a7f9f2..648f257 100644 --- a/src/tipideed/cgi.c +++ b/src/tipideed/cgi.c @@ -27,16 +27,17 @@ #define dienomem(rql, docroot) die500sys(rql, 111, (docroot), "stralloc_catb") -static void addenv_ (tipidee_rql const *rql, char const *docroot, char const *k, char const *v, int slash) +static void addenv_ (tipidee_rql const *rql, char const *docroot, char const *k, char const *v, size_t vlen, int slash) { if (!stralloc_cats(&g.sa, k) || !stralloc_catb(&g.sa, "=/", 1 + !!slash) - || !stralloc_cats(&g.sa, v) + || !stralloc_catb(&g.sa, v, vlen) || !stralloc_0(&g.sa)) dienomem(rql, docroot) ; } -#define addenv(rql, d, k, v) addenv_(rql, d, k, (v), 0) -#define addenvslash(rql, d, k, v) addenv_(rql, d, k, (v), 1) +#define addenv(rql, d, k, v) addenv_(rql, d, k, (v), strlen(v), 0) +#define addenvb(rql, d, k, v, vlen) addenv_(rql, d, k, v, (vlen), 0) +#define addenvslash(rql, d, k, v) addenv_(rql, d, k, (v), strlen(v), 1) static void delenv (tipidee_rql const *rql, char const *docroot, char const *k) { @@ -92,13 +93,11 @@ static inline void modify_env (tipidee_rql const *rql, char const *docroot, tipi char const *val = hdr->buf + hdr->list[i].right ; if (!strcasecmp(key, "Authorization")) { - size_t n = str_chr(val, ' ') ; - if (n) + size_t len = strlen(val) ; + size_t n = byte_chr(val, len, ' ') ; + if (n < len) { - char scheme[n] ; - memcpy(scheme, val, n-1) ; - scheme[n-1] = 0 ; - addenv(rql, docroot, "AUTH_TYPE", scheme) ; + addenvb(rql, docroot, "AUTH_TYPE", val, n) ; got |= 1 ; } } |
