From 3c881c5cce99a39ae915b9bfe75bf7613e557d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Sun, 1 Jul 2012 09:09:31 +0200 Subject: [PATCH] Fixed issue #65: urlEncode doesn't properly handle < 0x10. Added reserve() calls in urlEncode/urlDecode that should improve memory management in certain situations (e.g. for ascii field names and numeric values in query strings). --- source/vibe/textfilter/urlencode.d | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/vibe/textfilter/urlencode.d b/source/vibe/textfilter/urlencode.d index ccefdc19ee..025fe81c49 100644 --- a/source/vibe/textfilter/urlencode.d +++ b/source/vibe/textfilter/urlencode.d @@ -16,6 +16,7 @@ import std.format; string urlEncode(string str) { auto dst = appender!string(); + dst.reserve(str.length); filterUrlEncode(dst, str); return dst.data; } @@ -23,6 +24,7 @@ string urlEncode(string str) string urlDecode(string str) { auto dst = appender!string(); + dst.reserve(str.length); filterUrlDecode(dst, str); return dst.data; } @@ -37,11 +39,11 @@ void filterUrlEncode(R)(ref R dst, string str) case 'A': .. case 'Z'+1: case 'a': .. case 'z'+1: case '0': .. case '9'+1: - case '-': case '_': case '.': case '~': + case '-': case '_': case '.': case '~': dst.put(str[0]); break; default: - formattedWrite(dst, "%%%x", str[0]); + formattedWrite(dst, "%%%02x", str[0]); } str = str[1 .. $]; }