Hi Julien,
On Sat, 23 Dec 2017, Julien Dusser wrote:
> Thank you for review. I didn't find any other error.
> Code in http.c:quote_ref_url() is almost the same but ch is a signed int, so
> there's no issue.
But that ch comes from a signed char *, so it actually *is* an issue: if
you cast a signed char of value -1 to an int, it will still be -1. So
we'll also need:
-- snipsnap --
diff --git a/http.c b/http.c
index 117ddae..ed8221f 100644
--- a/http.c
+++ b/http.c
@@ -1347,7 +1347,7 @@ void finish_all_active_slots(void)
}
/* Helpers for modifying and creating URLs */
-static inline int needs_quote(int ch)
+static inline int needs_quote(unsigned char ch)
{
if (((ch >= 'A') && (ch <= 'Z'))
|| ((ch >= 'a') && (ch <= 'z'))
@@ -1363,11 +1363,11 @@ static char *quote_ref_url(const char *base, const char
*ref)
{
struct strbuf buf = STRBUF_INIT;
const char *cp;
- int ch;
+ unsigned char ch;
end_url_with_slash(&buf, base);
- for (cp = ref; (ch = *cp) != 0; cp++)
+ for (cp = ref; (ch = (unsigned char)*cp); cp++)
if (needs_quote(ch))
strbuf_addf(&buf, "%%%02x", ch);
else