You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2026/05/14 20:27:00 UTC

[jira] [Updated] (SOLR-18239) `ObjectSizeEstimator.primitiveEstimate()` calls `obj.getClass()` without checking if `obj` is null

     [ https://issues.apache.org/jira/browse/SOLR-18239?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

ASF GitHub Bot updated SOLR-18239:
----------------------------------
    Labels: pull-request-available  (was: )

> `ObjectSizeEstimator.primitiveEstimate()` calls `obj.getClass()` without checking if `obj` is null
> --------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-18239
>                 URL: https://issues.apache.org/jira/browse/SOLR-18239
>             Project: Solr
>          Issue Type: Bug
>          Components: CrossDC
>    Affects Versions: 9.10.1
>         Environment: Using the CrossDC manager, fields that were not a problem without the CrossDC manager enabled are causing this failure.
>            Reporter: Aaron Dockter
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> h2. Issue
> Apache Solr cross-DC replication was failing with {{NullPointerException}} in the {{MirroringUpdateProcessor}} when indexing documents containing fields with null values. The error occurred in {{ObjectSizeEstimator.primitiveEstimate()}} which called {{obj.getClass()}} without checking if {{obj}} was null.
> h2. Root Cause
> {{MirroringUpdateProcessor.ObjectSizeEstimator.primitiveEstimate(Object obj, long def)}} did not check for null before calling {{{}obj.getClass(){}}}. When a {{SolrInputDocument}} contained a field with a null value, the size estimator would crash during cross-DC mirroring.
> h2. Resolution Fix
> Added a null guard at the start of the {{primitiveEstimate}} method:
>  
> {{private static long primitiveEstimate(Object obj, long def) {    if (obj == null) return def;
>     Class<?> clazz = obj.getClass();
>     ...
> }}}
> This ensures that when a field value is null, the method returns the default size estimate instead of attempting to introspect the class type.
> h2. Tests to Add
> Added a regression test in {{MirroringUpdateProcessorTest.java}} to verify the fix:
>  
> {{@Testpublic void testObjectSizeEstimatorWithNullFieldValue() {    SolrInputDocument doc = new SolrInputDocument();
>     doc.addField("id", "test");
>     doc.addField("nullField", null);    long size = MirroringUpdateProcessor.ObjectSizeEstimator.estimate(doc);
>     assertTrue("size should be non-negative", size >= 0);
> }}}
> This test creates a {{SolrInputDocument}} with a field explicitly set to {{null}} and verifies that {{ObjectSizeEstimator.estimate()}} completes successfully without throwing a {{{}NullPointerException{}}}.
> h2. Files Requiring Changes (Solr cross-dc module)
>  * {{solr/solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java}} — Added null guard in {{primitiveEstimate()}}
>  * {{solr/solr/modules/cross-dc/src/test/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessorTest.java}} — Added regression test {{testObjectSizeEstimatorWithNullFieldValue()}}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org