blob: d35e0cc9c10b140ffc5e8b635ae6828f6da050e2 (
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
27
28
29
30
31
32
33
34
35
36
37
38
39
|
From b46d216b3673246e7299a22dfb88a8f0d7538e5a Mon Sep 17 00:00:00 2001
From: debian.org <debian.org>
Date: Mon, 22 Feb 2010 23:14:35 +0100
Subject: [PATCH 6/6] buffer_escape.diff
http://ftp.de.debian.org/debian/pool/main/b/boa/boa_0.94.14rc21-3.1.diff.gz
---
src/buffer.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/src/buffer.c b/src/buffer.c
index 3663725..0a23f58 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);
--
1.7.0
|