You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by th...@apache.org on 2022/05/26 15:16:12 UTC
[lucene-solr] branch branch_8_11 updated: SOLR-16215 Escape query characters in Solr SQL Array UDF functions (#2662)
This is an automated email from the ASF dual-hosted git repository.
thelabdude pushed a commit to branch branch_8_11
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8_11 by this push:
new 62ad000d979 SOLR-16215 Escape query characters in Solr SQL Array UDF functions (#2662)
62ad000d979 is described below
commit 62ad000d9795032baf70a7995a7b6230e72fb24c
Author: Kiran Chitturi <ki...@lucidworks.com>
AuthorDate: Thu May 26 08:16:06 2022 -0700
SOLR-16215 Escape query characters in Solr SQL Array UDF functions (#2662)
* SOLR-16215 Escape query characters in Solr SQL Array UDF functions
* Update CHANGES.txt
---
solr/CHANGES.txt | 2 ++
solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java | 4 ++--
solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java | 7 ++++++-
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 11911c62629..ef45b4580d3 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -56,6 +56,8 @@ Bug Fixes
* SOLR-16191: Validate that installed ps utility supports -p flag, so that we do not inadvertantly stop the wrong process. (Mike Drob, Michael Gibney)
+* SOLR-16215: Escape query characters in Solr SQL Array UDF functions (Kiran Chitturi via Timothy Potter)
+
================== 8.11.1 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
index f87f72966e8..ae28b4a417d 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrFilter.java
@@ -171,7 +171,7 @@ class SolrFilter extends Filter implements SolrRel {
if (valuesNode instanceof RexLiteral) {
String literal = toSolrLiteral(fieldName, (RexLiteral) valuesNode);
if (!StringUtils.isEmpty(literal)) {
- return fieldName + ":\"" + literal + "\"";
+ return fieldName + ":\"" + ClientUtils.escapeQueryChars(literal.trim()) + "\"";
} else {
return null;
}
@@ -181,7 +181,7 @@ class SolrFilter extends Filter implements SolrRel {
valuesRexCall.getOperands().stream()
.map(op -> toSolrLiteral(fieldName, (RexLiteral) op))
.filter(value -> !StringUtils.isEmpty(value))
- .map(value -> "\"" + value.trim() + "\"")
+ .map(value -> "\"" + ClientUtils.escapeQueryChars(value.trim()) + "\"")
.collect(Collectors.joining(" " + booleanOperator + " "));
return fieldName + ":(" + valuesString + ")";
}
diff --git a/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
index 1eba3e72387..5da67dd317a 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
@@ -2612,7 +2612,7 @@ public class TestSQLHandler extends SolrCloudTestCase {
new UpdateRequest()
.add("id", "1", "name_s", "hello-1", "a_i", "1", "stringxmv", "a", "stringxmv", "b", "stringxmv", "c", "pdoublexmv", "1.5", "pdoublexmv", "2.5", "longs", "1", "longs", "2")
.add("id", "2", "name_s", "hello-2", "a_i", "2", "stringxmv", "c", "stringxmv", "d", "stringxmv", "e", "pdoublexmv", "1.5", "pdoublexmv", "3.5", "longs", "1", "longs", "3")
- .add("id", "3", "name_s", "hello-3", "a_i", "3", "stringxmv", "e", "stringxmv", "f", "stringxmv", "a", "pdoublexmv", "2.5", "pdoublexmv", "3.5", "longs", "2", "longs", "3")
+ .add("id", "3", "name_s", "hello-3", "a_i", "3", "stringxmv", "e", "stringxmv", "\"f\"", "stringxmv", "g\"h", "stringxmv", "a", "pdoublexmv", "2.5", "pdoublexmv", "3.5", "longs", "2", "longs", "3")
.commit(cluster.getSolrClient(), COLLECTIONORALIAS);
expectResults("select id, pdoublexmv from $ALIAS", 3);
@@ -2625,6 +2625,11 @@ public class TestSQLHandler extends SolrCloudTestCase {
expectResults("select id, stringxmv from $ALIAS WHERE array_contains_all(stringxmv, ('c', 'e'))", 1);
expectResults("select id, stringxmv from $ALIAS WHERE array_contains_all(stringxmv, ('c', 'd', 'e'))", 1);
+ expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(stringxmv, ('\"a\"', '\"e\"'))", 0);
+ expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(stringxmv, ('\"a\"'))", 0);
+ expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(stringxmv, ('\"f\"'))", 1);
+ expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(stringxmv, ('g\"h'))", 1);
+ expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(stringxmv, ('a', 'e', '\"f\"'))", 3);
expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(pdoublexmv, (1.5, 2.5))", 3);
expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(longs, (1, 3))", 3);
expectResults("select id, stringxmv from $ALIAS WHERE array_contains_any(stringxmv, ('a'))", 2);