From b46d216b3673246e7299a22dfb88a8f0d7538e5a Mon Sep 17 00:00:00 2001 From: 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