[
https://issues.apache.org/jira/browse/SOLR-6457?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hoss Man updated SOLR-6457:
---------------------------
Description:
org.apache.solr.client.solrj.impl.LBHttpSolrServer
line 442
int count = counter.incrementAndGet();
ServerWrapper wrapper = serverList[count % serverList.length];
when counter overflows, the mod operation of
"count % serverList.length" will start trying to use negative numbers as array
indexes.
suggess to fixup it ,eg:
//keep count is greater than 0
int count = counter.incrementAndGet() & 0x7FFFFFF;
was:
org.apache.solr.client.solrj.impl.LBHttpSolrServer
line 442
int count = counter.incrementAndGet();
ServerWrapper wrapper = serverList[count % serverList.length];
when count > Integer.MAX_VALUE
count % serverList.length will loop by 0,-1,0,-1..........
suggess to fixup it ,eg:
//keep count is greater than 0
int count = counter.incrementAndGet() & 0x7FFFFFF;
Summary: LBHttpSolrServer: AIOOBE risk if counter overflows (was:
loadblance will not work when count > Integer.MAX_VALUE)
clarified summary & description to better explain hte problem (counter is an
AtomicInteger, so the count can never be greater then Integer.MAX_VALUE -- the
problem is what happens when it overflows to negative numbers.
additional questions i have when looking at this code:
* why is a counter being used here instead of picking a random element?
* why is the counter an int instead of a long (do we really care about saving a
few bytes in this?)
> LBHttpSolrServer: AIOOBE risk if counter overflows
> --------------------------------------------------
>
> Key: SOLR-6457
> URL: https://issues.apache.org/jira/browse/SOLR-6457
> Project: Solr
> Issue Type: Bug
> Components: clients - java
> Affects Versions: 4.0, 4.1, 4.2, 4.2.1, 4.3, 4.3.1, 4.4, 4.5, 4.5.1, 4.6,
> 4.6.1, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1, 4.9
> Reporter: longkeyy
> Labels: patch
>
> org.apache.solr.client.solrj.impl.LBHttpSolrServer
> line 442
> int count = counter.incrementAndGet();
> ServerWrapper wrapper = serverList[count % serverList.length];
> when counter overflows, the mod operation of
> "count % serverList.length" will start trying to use negative numbers as
> array indexes.
> suggess to fixup it ,eg:
> //keep count is greater than 0
> int count = counter.incrementAndGet() & 0x7FFFFFF;
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]