Repository: camel
Updated Branches:
  refs/heads/master 17475d80b -> 628493645


Add a secondary compatibility test in XMLTokenizer xtokenize to reject 
incompatible stax parsers


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/62849364
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/62849364
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/62849364

Branch: refs/heads/master
Commit: 628493645476c795c56cc3e3ea4753f243a5142f
Parents: 17475d8
Author: Akitoshi Yoshida <a...@apache.org>
Authored: Thu Dec 18 18:26:11 2014 +0100
Committer: Akitoshi Yoshida <a...@apache.org>
Committed: Thu Dec 18 18:26:11 2014 +0100

----------------------------------------------------------------------
 .../camel/support/XMLTokenExpressionIterator.java     | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/62849364/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
 
b/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
index 19cc2a6..a9f605e 100644
--- 
a/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
+++ 
b/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
@@ -174,7 +174,8 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
         private boolean backtrack;
         private int trackdepth = -1;
         private int depth;
-        
+        private boolean compliant;
+
         private Object nextToken;
         
         public XMLTokenIterator(String path, Map<String, String> nsmap, char 
mode, InputStream in, String charset) 
@@ -213,6 +214,7 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
             this.reader = new StaxConverter().createXMLStreamReader(this.in);
 
             LOG.trace("reader.class: {}", reader.getClass());
+            // perform the first offset compliance test
             int coff = reader.getLocation().getCharacterOffset();
             if (coff != 0) {
                 LOG.error("XMLStreamReader {} not supporting Location");
@@ -233,7 +235,6 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
                 this.tokens = new ArrayList<String>();
             }       
             this.nextToken = getNextToken();
-
         }
         
         private boolean isDoS() {
@@ -466,6 +467,15 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
                     }
                     
                     String token = getCurrenText();
+                    // perform the second compliance test
+                    if (!compliant) {
+                        if (token != null && token.startsWith("<") && 
!token.startsWith("<?")) {
+                            LOG.error("XMLStreamReader {} not supporting 
Location");
+                            throw new XMLStreamException("reader not 
supporting Location");
+                        }
+                        compliant = true;
+                    }
+
                     LOG.trace("token={}", token);
                     if (!backtrack && mode == 'w') {
                         pushSegment(name, token);

Reply via email to