theonedev/onedev · error · IllegalArgumentException
Skip must be non-negative.
Error message
Skip must be non-negative.
What it means
SkipRevFilter.create builds a filter that skips the first N commits during a rev walk. Negative skip counts are rejected because skipping a negative number of commits has no meaning. Passing a negative value throws IllegalArgumentException.
Source
Thrown at server-core/src/main/java/org/eclipse/jgit/revwalk/filter/SkipRevFilter.java:39
/**
* Filter that includes commits after a configured number are skipped.
*/
public class SkipRevFilter extends RevFilter {
private final int skip;
private int count;
/**
* Create a new skip filter.
*
* @param skip
* the number of commits to skip
* @return a new filter
*/
public static RevFilter create(int skip) {
if (skip < 0)
throw new IllegalArgumentException(
JGitText.get().skipMustBeNonNegative);
return new SkipRevFilter(skip);
}
private SkipRevFilter(int skip) {
this.skip = skip;
}
@Override
public boolean include(RevWalk walker, RevCommit cmit)
throws StopWalkException, MissingObjectException,
IncorrectObjectTypeException, IOException {
if (skip > count++)
return false;
return true;
}
@OverrideView on GitHub (pinned to d44925c47c)
Solutions
- Clamp or validate the skip value to >= 0 before calling create
- Fix pagination math to use Math.max(0, offset)
- Validate user-supplied page/offset parameters at the boundary
Example fix
// before RevFilter f = SkipRevFilter.create((page - 1) * pageSize); // after int skip = Math.max(0, (page - 1) * Math.max(1, pageSize)); RevFilter f = skip > 0 ? SkipRevFilter.create(skip) : RevFilter.NONE;
Defensive patterns
Strategy: validation
Validate before calling
if (skip < 0) throw new IllegalArgumentException("skip must be >= 0, got " + skip); Type guard
boolean isValidSkip(int skip) { return skip >= 0; } Try / catch
try { return SkipRevFilter.create(skip); } catch (IllegalArgumentException e) { return RevFilter.NONE; } Prevention
- Clamp derived offsets with Math.max(0, offset)
- Validate page/pageSize parameters at the API boundary
When it happens
Trigger: Calling SkipRevFilter.create(skip) with a negative int, e.g. when deriving the skip count from pagination math (page-1)*pageSize that went negative, or from unvalidated user input.
Common situations: Pagination logic in a git history viewer where page number or page size from the client is negative or causes an underflow; unvalidated offset parameters.
Related errors
- Cannot combine TreeFilter {0} with RevFilter {1}.
- Cannot find merge base using first parent.
- Cannot combine topo sort with topo-keep-branch-together sort
- At least two filters needed.
- Cannot match on empty string.
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/344e8ccef8381f75.
Report an issue: GitHub.