blob: 570c254e1633c283bc47f651ca984d4d69b7c1f7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
diff --git a/src/buffer.c b/src/buffer.c
index 99f3e7c..6720e21 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -77,6 +77,7 @@ int req_write_escape_http(request * req, const char *msg)
char c, *dest;
const char *inp;
+ int skip = 0;
int left;
inp = msg;
dest = req->buffer + req->buffer_end;
@@ -84,7 +85,12 @@ int req_write_escape_http(request * req, const char *msg)
* in the middle of a transfer of up to 3 bytes */
left = BUFFER_SIZE - req->buffer_end;
while ((c = *inp++) && left >= 3) {
- if (needs_escape((unsigned int) c)) {
+ /* Lower the skip character count. */
+ if (skip) skip--;
+ /* If we have a '%', we skip the two follow characters. */
+ if (c == '%') skip = 2;
+
+ if (!skip && needs_escape((unsigned int) c)) {
*dest++ = '%';
*dest++ = INT_TO_HEX((c >> 4) & 0xf);
*dest++ = INT_TO_HEX(c & 0xf);
|