This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/main by this push:
     new 04c40e4928 GH-2833: Handle x flag in java regex
04c40e4928 is described below

commit 04c40e4928a3e54fff30f9e3819d28b96d1e5c79
Author: Andy Seaborne <[email protected]>
AuthorDate: Mon Dec 2 20:31:13 2024 +0000

    GH-2833: Handle x flag in java regex
---
 .../org/apache/jena/ext/xerces_regex/REUtil.java   |  2 +-
 .../java/org/apache/jena/sparql/expr/E_Regex.java  |  6 +++---
 .../org/apache/jena/sparql/expr/RegexEngine.java   | 24 ++++++++--------------
 .../jena/ext/xerces/impl/xpath/regex/REUtil.java   |  8 ++++----
 4 files changed, 16 insertions(+), 24 deletions(-)

diff --git 
a/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java 
b/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
index 6ed482a0b4..9a859959e2 100644
--- a/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
+++ b/jena-arq/src/main/java/org/apache/jena/ext/xerces_regex/REUtil.java
@@ -338,7 +338,7 @@ public final class REUtil {
         StringBuilder buffer = null;
         for (int i = 0;  i < len;  i ++) {
             int ch = literal.charAt(i);
-            if (".*+?{[()|\\^$".indexOf(ch) >= 0) {
+            if (".*+?{}[]()|\\^$".indexOf(ch) >= 0) {
                 if (buffer == null) {
                     buffer = new StringBuilder(i+(len-i)*2);
                     if (i > 0)  buffer.append(literal.substring(0, i));
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
index 62ae033d0f..94f14e752f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Regex.java
@@ -91,9 +91,9 @@ public class E_Regex extends ExprFunctionN
             throw new ExprException("REGEX: Pattern is not a string: " + 
vPattern);
         if ( vFlags != null && !vFlags.isString() )
             throw new ExprException("REGEX: Pattern flags are not a string: " 
+ vFlags);
-        String s = (vFlags == null) ? null : vFlags.getString();
-        checkFlags(s);
-        return makeRegexEngine(vPattern.getString(), s);
+        String flags = (vFlags == null) ? null : vFlags.getString();
+        checkFlags(flags);
+        return makeRegexEngine(vPattern.getString(), flags);
     }
 
     private static void checkFlags(String flags) {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
index 091bb6e3d0..214a4425cf 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java
@@ -94,26 +94,19 @@ public abstract class RegexEngine {
     public static int makeMask(String modifiers) {
         if ( modifiers == null )
             return 0;
-
         int newMask = 0;
         for ( int i = 0 ; i < modifiers.length() ; i++ ) {
             switch (modifiers.charAt(i)) {
-                case 'i' :
+                case 'i' -> {
                     newMask |= Pattern.UNICODE_CASE;
                     newMask |= Pattern.CASE_INSENSITIVE;
-                    break;
-                case 'm' :
-                    newMask |= Pattern.MULTILINE;
-                    break;
-                case 's' :
-                    newMask |= Pattern.DOTALL;
-                    break;
-                // Not supported by Java regex
-                // case 'x': newMask |= Pattern.; break;
-                case 'q' :;
-                    break;
-
-                default :
+                }
+                case 'm' -> newMask |= Pattern.MULTILINE;
+                case 's' -> newMask |= Pattern.DOTALL;
+                case 'x' -> newMask |= Pattern.COMMENTS;
+                // Handled separately.
+                case 'q' -> {}
+                default ->
                     throw new ExprEvalException("Unsupported flag in regex 
modifiers: " + modifiers.charAt(i));
             }
         }
@@ -132,7 +125,6 @@ public abstract class RegexEngine {
             Matcher m = regexPattern.matcher(s);
             return m.find();
         }
-
     }
 
     public static class RegexXerces extends RegexEngine {
diff --git 
a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
 
b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
index a1cffa1f1c..04fa540321 100644
--- 
a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
+++ 
b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/REUtil.java
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,7 +21,7 @@ import java.text.CharacterIterator;
 
 /**
  * {@literal @xerces.internal}
- * 
+ *
  * @version $Id: REUtil.java 828015 2009-10-21 13:56:13Z knoaman $
  */
 public final class REUtil {
@@ -338,7 +338,7 @@ public final class REUtil {
         StringBuilder buffer = null;
         for (int i = 0;  i < len;  i ++) {
             int ch = literal.charAt(i);
-            if (".*+?{[()|\\^$".indexOf(ch) >= 0) {
+            if (".*+?{}[]()|\\^$".indexOf(ch) >= 0) {
                 if (buffer == null) {
                     buffer = new StringBuilder(i+(len-i)*2);
                     if (i > 0)  buffer.append(literal.substring(0, i));

Reply via email to