Author: andy
Date: Sat Jul 19 18:23:48 2014
New Revision: 1611942
URL: http://svn.apache.org/r1611942
Log:
JENA-741 : Handle bad replace group
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestFunctions.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java?rev=1611942&r1=1611941&r2=1611942&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
Sat Jul 19 18:23:48 2014
@@ -398,21 +398,25 @@ public class XSDFuncOp
private static String replaceAll(Matcher matcher, String rep) {
// Follow Java -- return matcher.replaceAll(rep) ;
- StringBuffer sb = null ; // Delay until needed
- while(matcher.find()) {
- if ( sb == null )
- sb = new StringBuffer() ;
- else {
- // Do one match of zerolength string otherwise filter out.
- if (matcher.start() == matcher.end() )
- continue ;
+ try {
+ StringBuffer sb = null ; // Delay until needed
+ while(matcher.find()) {
+ if ( sb == null )
+ sb = new StringBuffer() ;
+ else {
+ // Do one match of zerolength string otherwise filter out.
+ if (matcher.start() == matcher.end() )
+ continue ;
+ }
+ matcher.appendReplacement(sb, rep);
}
- matcher.appendReplacement(sb, rep);
+ if ( sb == null )
+ return null ;
+ matcher.appendTail(sb);
+ return sb.toString();
+ } catch (IndexOutOfBoundsException ex) {
+ throw new ExprEvalException("IndexOutOfBounds", ex) ;
}
- if ( sb == null )
- return null ;
- matcher.appendTail(sb);
- return sb.toString();
}
public static NodeValue strReplace(NodeValue nvStr, NodeValue nvPattern,
NodeValue nvReplacement) {
Modified:
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestFunctions.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestFunctions.java?rev=1611942&r1=1611941&r2=1611942&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestFunctions.java
(original)
+++
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestFunctions.java
Sat Jul 19 18:23:48 2014
@@ -175,6 +175,9 @@ public class TestFunctions
@Test public void exprReplace11() { test("REPLACE('', '.', 'Z')",
NodeValue.makeString("")) ; }
@Test public void exprReplace12() { test("REPLACE('', '(a|b)?', 'Z')",
NodeValue.makeString("Z")) ; }
+ // Bad group
+ @Test public void exprReplace13() { testEvalException("REPLACE('abc',
'.*', '$1')") ; }
+
@Test public void exprBoolean1() { test("fn:boolean('')", FALSE) ; }
@Test public void exprBoolean2() { test("fn:boolean(0)", FALSE) ; }
@Test public void exprBoolean3() { test("fn:boolean(''^^xsd:string)",
FALSE) ; }