From 6f0e740e19d6225150571a4dad969bbb2934722e Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Sat, 22 Mar 2014 14:14:01 +0100 Subject: [PATCH] [#2234] Use QueryStringDecoder.decodeComponent to decode url-encoded data instead of Java's URLDecoder. Backport of 98bc7b78595d96c05d6b9dd482fef1693090a550 Motivation: Previously, we used URLDecoder.decode(...) to decode url-encoded data. This generates a lot of garbage and takes a considerable amount of time. Modifications: Replace URLDecoder.decode(...) with QueryStringDecoder.decodeComponent(...) Result: Less garbage to GC and faster decode processing. --- .../codec/http/multipart/HttpPostRequestDecoder.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java index 82c7c2bed1..3820be7bc1 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java @@ -23,14 +23,13 @@ import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.LastHttpContent; +import io.netty.handler.codec.http.QueryStringDecoder; import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException; import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadOptimize; import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.TransferEncodingMechanism; import io.netty.util.internal.StringUtil; import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @@ -753,13 +752,8 @@ public class HttpPostRequestDecoder { * @return the decoded component */ private static String decodeAttribute(String s, Charset charset) throws ErrorDataDecoderException { - if (s == null) { - return ""; - } try { - return URLDecoder.decode(s, charset.name()); - } catch (UnsupportedEncodingException e) { - throw new ErrorDataDecoderException(charset.toString(), e); + return QueryStringDecoder.decodeComponent(s, charset); } catch (IllegalArgumentException e) { throw new ErrorDataDecoderException("Bad string: '" + s + '\'', e); }