This is an automated email from the ASF dual-hosted git repository.
krisden pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 45834aa6245 SOLR-16589: Large fields with large=true can be truncated
when using unicode values (#1241)
45834aa6245 is described below
commit 45834aa62454b15f6bb3b4ebeeee2f0a94fc11f9
Author: Kevin Risden <[email protected]>
AuthorDate: Thu Dec 15 14:15:01 2022 -0500
SOLR-16589: Large fields with large=true can be truncated when using
unicode values (#1241)
---
solr/CHANGES.txt | 2 ++
solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java | 2 +-
solr/core/src/test/org/apache/solr/search/LargeFieldTest.java | 7 +++++--
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 3c2b73e1a8d..18624b98cad 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -130,6 +130,8 @@ Bug Fixes
* SOLR-10458: Fix followRedirect property on HttpSolrClient not set when using
Builder pattern. (Eric Pugh)
+* SOLR-16589: Large fields with large=true can be truncated when using unicode
values (Kevin Risden)
+
Build
---------------------
* Upgrade forbiddenapis to 3.4 (Uwe Schindler)
diff --git a/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
b/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
index 6eedcb06160..ca231379cb8 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
@@ -508,7 +508,7 @@ public class SolrDocumentFetcher {
public void stringField(FieldInfo fieldInfo, String value)
throws IOException {
Objects.requireNonNull(value, "String value should not be
null");
bytesRef.bytes = value.getBytes(StandardCharsets.UTF_8);
- bytesRef.length = value.length();
+ bytesRef.length = bytesRef.bytes.length;
done = true;
}
diff --git a/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
b/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
index d85be338a50..5045a3561bd 100644
--- a/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
@@ -23,6 +23,7 @@ import java.util.Objects;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.misc.document.LazyDocument;
+import org.apache.lucene.tests.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.schema.IndexSchema;
import org.junit.AfterClass;
@@ -36,7 +37,6 @@ public class LargeFieldTest extends SolrTestCaseJ4 {
private static final String BIG_FIELD = "bigField";
@BeforeClass
- @SuppressWarnings({"unchecked"})
public static void initManagedSchemaCore() throws Exception {
// This testing approach means no schema file or per-test temp solr-home!
System.setProperty("managed.schema.mutable", "true");
@@ -85,7 +85,8 @@ public class LargeFieldTest extends SolrTestCaseJ4 {
@Test
public void test() throws Exception {
// add just one document (docid 0)
- assertU(adoc(ID_FLD, "101", LAZY_FIELD, "lzy", BIG_FIELD, "big document
field one"));
+ String bigFieldValue = TestUtil.randomUnicodeString(random());
+ assertU(adoc(ID_FLD, "101", LAZY_FIELD, "lzy", BIG_FIELD, bigFieldValue));
assertU(commit());
// trigger the ID_FLD to get into the doc cache; don't reference other
fields
@@ -109,6 +110,8 @@ public class LargeFieldTest extends SolrTestCaseJ4 {
assertEager(d, ID_FLD);
assertLazyLoaded(d, LAZY_FIELD);
assertLazyLoaded(d, BIG_FIELD); // loaded now
+
+ assertEquals(bigFieldValue, d.getField(BIG_FIELD).stringValue());
}
private void assertEager(Document d, String fieldName) {