This is an automated email from the ASF dual-hosted git repository. krisden pushed a commit to branch branch_9_1 in repository https://gitbox.apache.org/repos/asf/solr.git
commit d558cec6582a6084d0bb163d55b960e00d340a44 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 | 7 +++++++ 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, 13 insertions(+), 3 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 99c9014b95f..bb24d8be9a7 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -4,6 +4,13 @@ This file lists Solr's raw release notes with details of every change to Solr. Most people will find the solr-upgrade-notes.adoc file more approachable. https://github.com/apache/solr/blob/main/solr/solr-ref-guide/modules/upgrade-notes/pages/solr-upgrade-notes.adoc +================== 9.1.1 ================== + +Bug Fixes +--------------------- + +* SOLR-16589: Large fields with large=true can be truncated when using unicode values (Kevin Risden) + ================== 9.1.0 ================== New Features 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 eab3a837315..a7a700a33ee 100644 --- a/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java +++ b/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java @@ -509,7 +509,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) {
