You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Donal Evans (Jira)" <ji...@apache.org> on 2021/07/13 19:29:00 UTC
[jira] [Created] (GEODE-9429) Radish HSCAN implementation cannot
handle values for COUNT greater than Integer.MAX_VALUE / 2
Donal Evans created GEODE-9429:
----------------------------------
Summary: 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
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)