[ 
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]

Reply via email to