{"record":{"id":"2340d6974678bfae","repo":"redis/jedis","slug":"range-must-not-be-null","errorCode":null,"errorMessage":"Range must not be null.","messagePattern":"Range must not be null\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/redis/clients/jedis/CommandObjects.java","lineNumber":3074,"sourceCode":"  public final CommandObject<Long> arset(byte[] key, long index, byte[]... values) {\n    return new CommandObject<>(commandArguments(ARSET).key(key).add(index).addObjects((Object[]) values),\n        BuilderFactory.LONG);\n  }\n\n  public final CommandObject<Long> arset(String key, long index, String value) {\n    return new CommandObject<>(commandArguments(ARSET).key(key).add(index).add(value),\n        BuilderFactory.LONG);\n  }\n\n  public final CommandObject<Long> arset(byte[] key, long index, byte[] value) {\n    return new CommandObject<>(commandArguments(ARSET).key(key).add(index).add(value),\n        BuilderFactory.LONG);\n  }\n\n  private static void addLongRanges(CommandArguments args, LongRange[] ranges) {\n    for (LongRange r : ranges) {\n      if (r == null) {\n        throw new IllegalArgumentException(\"Range must not be null.\");\n      }\n      args.add(r.start()).add(r.end());\n    }\n  }\n  // Array commands\n\n  // Stream commands\n  public final CommandObject<StreamEntryID> xadd(String key, StreamEntryID id, Map<String, String> hash) {\n    return new CommandObject<>(addFlatMapArgs(commandArguments(XADD).key(key).add(id == null ? StreamEntryID.NEW_ENTRY : id), hash),\n        BuilderFactory.STREAM_ENTRY_ID);\n  }\n\n  public final CommandObject<StreamEntryID> xadd(String key, XAddParams params, Map<String, String> hash) {\n    return new CommandObject<>(addFlatMapArgs(commandArguments(XADD).key(key).addParams(params), hash),\n        BuilderFactory.STREAM_ENTRY_ID);\n  }\n\n  public final CommandObject<Long> xlen(String key) {","sourceCodeStart":3056,"sourceCodeEnd":3092,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/CommandObjects.java#L3056-L3092","documentation":"CommandObjects.addLongRanges() validates each LongRange in a varargs array before serializing range arguments for range-taking commands. A null element in the array would produce a malformed command, so the library throws IllegalArgumentException eagerly on the client side.","triggerScenarios":"Calling any CommandObjects method that takes LongRange... ranges (e.g. range/revrange style APIs) with an array containing a null element, e.g. addLongRanges invoked with new LongRange[]{null} or an array built by filling an oversized array.","commonSituations":"Building ranges programmatically where some slots stay null; reusing a pre-allocated LongRange[] buffer only partially filled; passing the result of a lookup that returned null instead of a range object.","solutions":["Ensure every element of the LongRange[] array is non-null before calling the API","Filter out null entries: Arrays.stream(ranges).filter(Objects::nonNull).toArray(LongRange[]::new)","Construct ranges explicitly with LongRange.startEnd(...) / LongRange.range(...) instead of leaving defaults null"],"exampleFix":"// before\nLongRange[] ranges = new LongRange[3];\nranges[0] = LongRange.range(0, 10);\nclient.cmd ranges(ranges); // null[1], null[2] -> throw\n// after\nList<LongRange> list = new ArrayList<>();\nlist.add(LongRange.range(0, 10));\nclient.ranges(list.toArray(new LongRange[0]));","handlingStrategy":"validation","validationCode":"if (ranges == null || Arrays.stream(ranges).anyMatch(Objects::nonNull) == false) throw new IllegalArgumentException(\"ranges must contain at least one non-null LongRange\");\nfor (LongRange r : ranges) { if (r == null) throw new IllegalArgumentException(\"null range at index \" + i); }","typeGuard":"static boolean allNonNull(LongRange[] a) { return a != null && Arrays.stream(a).allMatch(Objects::nonNull); }","tryCatchPattern":"try { cmd.ranges(ranges); } catch (IllegalArgumentException e) { log.error(\"null range element\", e); }","preventionTips":["Never pre-allocate LongRange[] with fixed size and leave slots null","Use a List<LongRange> and toArray at call time","Build ranges via LongRange factory methods only"],"tags":["jedis","argument-validation","null-check"],"backgroundTag":"null-argument","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}