From 22f6ace753fb935c0d308d412fd65871c93388e4 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 13 Apr 2015 17:40:05 +0200 Subject: [PATCH] WEB-14926 org.xml.sax.SAXParseException: expected Element when open page in browser --- .../src/org/jetbrains/ide/XmlRpcServerImpl.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/platform/built-in-server/src/org/jetbrains/ide/XmlRpcServerImpl.java b/platform/built-in-server/src/org/jetbrains/ide/XmlRpcServerImpl.java index 5fbbaf27663e..59fa6d87aa88 100644 --- a/platform/built-in-server/src/org/jetbrains/ide/XmlRpcServerImpl.java +++ b/platform/built-in-server/src/org/jetbrains/ide/XmlRpcServerImpl.java @@ -30,11 +30,13 @@ import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.QueryStringDecoder; import org.apache.xmlrpc.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.io.Responses; +import org.xml.sax.SAXParseException; import java.io.IOException; import java.lang.reflect.Method; @@ -94,10 +96,15 @@ public class XmlRpcServerImpl implements XmlRpcServer { if (request.method() == HttpMethod.POST) { ByteBuf result; - ByteBufInputStream in = new ByteBufInputStream(request.content()); + ByteBuf content = request.content(); + if (content.readableBytes() == 0) { + Responses.sendStatus(HttpResponseStatus.BAD_REQUEST, context.channel(), request); + return true; + } + + ByteBufInputStream in = new ByteBufInputStream(content); try { XmlRpcServerRequest xmlRpcServerRequest = new XmlRpcRequestProcessor().decodeRequest(in); - if (StringUtil.isEmpty(xmlRpcServerRequest.getMethodName())) { LOG.warn("method name empty"); return false; @@ -106,6 +113,11 @@ public class XmlRpcServerImpl implements XmlRpcServer { Object response = invokeHandler(getHandler(xmlRpcServerRequest.getMethodName(), handlers == null ? handlerMapping : handlers), xmlRpcServerRequest); result = Unpooled.wrappedBuffer(new XmlRpcResponseProcessor().encodeResponse(response, CharsetToolkit.UTF8)); } + catch (SAXParseException e) { + LOG.warn(e); + Responses.sendStatus(HttpResponseStatus.BAD_REQUEST, context.channel(), request); + return true; + } catch (Throwable e) { context.channel().close(); LOG.error(e);