[ 
https://issues.apache.org/jira/browse/GEODE-9429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17381515#comment-17381515
 ] 

ASF subversion and git services commented on GEODE-9429:
--------------------------------------------------------

Commit 970497912dec5af43605842195bc8a7dd1479851 in geode's branch 
refs/heads/develop from Donal Evans
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=9704979 ]

GEODE-9424: Accept Long arguments for Redis commands (#6698)

- Do not return errors when arguments are specified that are less than
 Integer.MIN_VALUE or less than Integer.MAX_VALE
 - Convert long arguments outside the above range to Integer.MIN_VALUE
 or Integer.MAX_VALUE to be used internally
 - Add tests for new Coder method and coverage for existing supported
 commands that take integer arguments, except HSCAN which will require
 GEODE-9429 to be fixed first

Authored-by: Donal Evans <doev...@vmware.com>

> Radish HSCAN implementation cannot handle values for COUNT greater than 
> Integer.MAX_VALUE / 2
> ---------------------------------------------------------------------------------------------
>
>                 Key: GEODE-9429
>                 URL: https://issues.apache.org/jira/browse/GEODE-9429
>             Project: Geode
>          Issue Type: Bug
>          Components: redis
>    Affects Versions: 1.15.0
>            Reporter: Donal Evans
>            Priority: Major
>
> The below code is the current implementation of HSCAN in {{RedisHash}}. When 
> the value of {{count}} passed to this method is greater than 
> {{Integer.MAX_VALUE / 2}} the condition of the while loop suffers from 
> integer overflow and the loop does not execute correctly.
> {code:java}
>   public ImmutablePair<Integer, List<byte[]>> hscan(Pattern matchPattern, int 
> count, int cursor) {
>     ArrayList<byte[]> resultList = new ArrayList<>(count + 2);
>     do {
>       cursor = hash.scan(cursor, 1,
>           (list, key, value) -> addIfMatching(matchPattern, list, key, 
> value), resultList);
>     } while (cursor != 0 && resultList.size() < (count * 2));
>     return new ImmutablePair<>(cursor, resultList);
> {code}
> This could be fixed by changing the type of {{resultList}} to 
> {{List<ImmutablePair<byte[] byte[]>>}} and modifying the {{addIfMatching()}} 
> method to populate the list with {{ImmutablePair}}s of keys and values rather 
> than a single continuous list of interleaved keys and values.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to