commit - cd1d043db84e31534151a1db0dd47b5a1f201b5e
commit + 1a69f47149d069693500a0b99c5022959fc5e506
blob - f43eb0605a26c289f40e9b4f0aced51aabb16e13
blob + 5dd1d612d44d6e1c0a3231ca8610e59090ade425
--- iri.c
+++ iri.c
buf = q = iri->iri_query;
bufsize = sizeof(iri->iri_query);
while (*p && (q - buf < bufsize)) {
- if (unreserved(*p) || sub_delims(*p) || *p == ':' || *p == '@' ||
- *p == '/' || *p == '?')
- *q++ = *p++;
- else {
- if (q - buf >= bufsize - 3)
- goto err;
- r = snprintf(tmp, sizeof(tmp), "%%%02X", (int)*p);
- if (r < 0 || (size_t)r > sizeof(tmp))
- return (-1);
- *q++ = tmp[0];
- *q++ = tmp[1];
- *q++ = tmp[2];
- p++;
+ if (unreserved(*p) || sub_delims(*p) || *p == ':' ||
+ *p == '@' || *p == '/' || *p == '?') {
+ *q++ = *p++;
+ continue;
}
+
+ if (q - buf >= bufsize - 3)
+ goto err;
+ r = snprintf(tmp, sizeof(tmp), "%%%02X", (int)*p);
+ if (r < 0 || (size_t)r > sizeof(tmp))
+ return (-1);
+ *q++ = tmp[0];
+ *q++ = tmp[1];
+ *q++ = tmp[2];
+ p++;
}
if ((*p == '\0') && (q - buf < bufsize)) {
iri->iri_flags |= IH_QUERY;