In redact_sensitive_header(), a C23 implementation of libc will complain
that strstr() assigns the result from "const char *cookie" to "char
*semicolon".
Ultimately the memory is writable. We're fed a strbuf, generate a const
pointer "sensitive_header" within it using skip_iprefix(), and then
assign the result to "cookie". So we can solve this by dropping the
const from "cookie" and "sensitive_header".
However, this runs afoul of skip_iprefix(), which wants a "const char
**" for its out-parameter. We can solve that by teaching skip_iprefix()
the same "make sure out is at least as const as in" magic that we
recently taught to skip_prefix().
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
* is done via tolower(), so it is strictly ASCII (no multi-byte characters or
* locale-specific conversions).
*/
-static inline bool skip_iprefix(const char *str, const char *prefix,
- const char **out)
+#define skip_iprefix(str, prefix, out) \
+ skip_iprefix_impl((str), (prefix), CONST_OUTPARAM((str), (out)))
+static inline bool skip_iprefix_impl(const char *str, const char *prefix,
+ const char **out)
{
do {
if (!*prefix) {
static int redact_sensitive_header(struct strbuf *header, size_t offset)
{
int ret = 0;
- const char *sensitive_header;
+ char *sensitive_header;
if (trace_curl_redact &&
(skip_iprefix(header->buf + offset, "Authorization:", &sensitive_header) ||
} else if (trace_curl_redact &&
skip_iprefix(header->buf + offset, "Cookie:", &sensitive_header)) {
struct strbuf redacted_header = STRBUF_INIT;
- const char *cookie;
+ char *cookie;
while (isspace(*sensitive_header))
sensitive_header++;