Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 40A5E11E58 for ; Mon, 16 Jun 2014 08:26:01 +0000 (UTC) Received: (qmail 16626 invoked by uid 500); 16 Jun 2014 08:26:01 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 16563 invoked by uid 500); 16 Jun 2014 08:26:01 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 16554 invoked by uid 99); 16 Jun 2014 08:26:01 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 16 Jun 2014 08:26:01 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id C44CA93BD31; Mon, 16 Jun 2014 08:26:00 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ay@apache.org To: commits@cxf.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: git commit: [CXF-5805] Invalid SOAP Envelope names are accepted Date: Mon, 16 Jun 2014 08:26:00 +0000 (UTC) Repository: cxf Updated Branches: refs/heads/2.7.x-fixes 5c3be52b1 -> 3a96429f6 [CXF-5805] Invalid SOAP Envelope names are accepted Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/3a96429f Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/3a96429f Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/3a96429f Branch: refs/heads/2.7.x-fixes Commit: 3a96429f6f7e51ec8f72492b8f2f3bb7a7045c43 Parents: 5c3be52 Author: Akitoshi Yoshida Authored: Mon Jun 16 10:23:02 2014 +0200 Committer: Akitoshi Yoshida Committed: Mon Jun 16 10:24:37 2014 +0200 ---------------------------------------------------------------------- .../soap/interceptor/Messages.properties | 1 + .../interceptor/ReadHeadersInterceptor.java | 14 +++++-- .../binding/soap/ReadHeaderInterceptorTest.java | 18 ++++++++ .../cxf/binding/soap/test-bad-envname.xml | 43 ++++++++++++++++++++ 4 files changed, 72 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/3a96429f/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties ---------------------------------------------------------------------- diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties index 4db3ded..416c89b 100644 --- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties +++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties @@ -28,6 +28,7 @@ NO_OPERATION=No such operation: {0} ATTACHMENT_IO=Attachment IO Exception: {0} INVALID_VERSION="{0}", the namespace on the "{1}" element, is not a valid SOAP version. INVALID_11_VERSION=A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint. +INVALID_ENVELOPE=Invalid SOAP Envelope name INVALID_FAULT=Invalid SOAP fault content NO_NAMESPACE=No namespace on "{0}" element. You must send a SOAP request. BP_2211_RPCLIT_CANNOT_BE_NULL=Cannot write part {0}. RPC/Literal parts cannot be null. (WS-I BP R2211) http://git-wip-us.apache.org/repos/asf/cxf/blob/3a96429f/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java ---------------------------------------------------------------------- diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java index 9d7862b..9145dd3 100644 --- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java +++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java @@ -107,15 +107,21 @@ public class ReadHeadersInterceptor extends AbstractSoapInterceptor { public static SoapVersion readVersion(XMLStreamReader xmlReader, SoapMessage message) { String ns = xmlReader.getNamespaceURI(); + String lcname = xmlReader.getLocalName(); if (ns == null || "".equals(ns)) { - throw new SoapFault(new Message("NO_NAMESPACE", LOG, xmlReader.getLocalName()), + throw new SoapFault(new Message("NO_NAMESPACE", LOG, lcname), Soap11.getInstance().getVersionMismatch()); } - + SoapVersion soapVersion = SoapVersionFactory.getInstance().getSoapVersion(ns); if (soapVersion == null) { - throw new SoapFault(new Message("INVALID_VERSION", LOG, ns, xmlReader.getLocalName()), - Soap11.getInstance().getVersionMismatch()); + throw new SoapFault(new Message("INVALID_VERSION", LOG, ns, lcname), + Soap11.getInstance().getVersionMismatch()); + } + + if (!"Envelope".equals(lcname)) { + throw new SoapFault(new Message("INVALID_ENVELOPE", LOG, lcname), + soapVersion.getSender()); } message.setVersion(soapVersion); return soapVersion; http://git-wip-us.apache.org/repos/asf/cxf/blob/3a96429f/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ReadHeaderInterceptorTest.java ---------------------------------------------------------------------- diff --git a/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ReadHeaderInterceptorTest.java b/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ReadHeaderInterceptorTest.java index 15ce682..db03adf 100644 --- a/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ReadHeaderInterceptorTest.java +++ b/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ReadHeaderInterceptorTest.java @@ -96,6 +96,24 @@ public class ReadHeaderInterceptorTest extends TestBase { } } + + @Test + public void testBadSOAPEnvelopeName() throws Exception { + soapMessage = TestUtil.createEmptySoapMessage(Soap12.getInstance(), chain); + InputStream in = getClass().getResourceAsStream("test-bad-envname.xml"); + assertNotNull(in); + ByteArrayDataSource bads = new ByteArrayDataSource(in, "test/xml"); + soapMessage.setContent(InputStream.class, bads.getInputStream()); + + ReadHeadersInterceptor r = new ReadHeadersInterceptor(BusFactory.getDefaultBus()); + try { + r.handleMessage(soapMessage); + fail("Did not throw exception"); + } catch (SoapFault f) { + assertEquals(Soap11.getInstance().getSender(), f.getFaultCode()); + } + } + @Test public void testNoClosingEnvTage() throws Exception { assertTrue(testNoClosingEnvTag(Boolean.TRUE)); http://git-wip-us.apache.org/repos/asf/cxf/blob/3a96429f/rt/bindings/soap/src/test/resources/org/apache/cxf/binding/soap/test-bad-envname.xml ---------------------------------------------------------------------- diff --git a/rt/bindings/soap/src/test/resources/org/apache/cxf/binding/soap/test-bad-envname.xml b/rt/bindings/soap/src/test/resources/org/apache/cxf/binding/soap/test-bad-envname.xml new file mode 100644 index 0000000..da84745 --- /dev/null +++ b/rt/bindings/soap/src/test/resources/org/apache/cxf/binding/soap/test-bad-envname.xml @@ -0,0 +1,43 @@ + + + + + + + + New York + Los Angeles + 2001-12-14 + late afternoon + aisle + + + Los Angeles + New York + 2001-12-20 + mid-morning + + + + + none + + +