prestodb/presto · error · IllegalArgumentException
A null array must have zero entries
Error message
A null array must have zero entries
What it means
ArrayBlock.fromElementBlock validation: a position whose valueIsNull entry is true must encode an empty array (offsets equal), but the given offsets/values describe a non-empty null array — inconsistent block construction arguments.
Source
Thrown at presto-common/src/main/java/com/facebook/presto/common/block/ArrayBlock.java:60
private volatile long logicalSizeInBytes;
/**
* Create an array block directly from columnar nulls, values, and offsets into the values.
* A null array must have no entries.
*/
public static Block fromElementBlock(int positionCount, Optional<boolean[]> valueIsNullOptional, int[] arrayOffset, Block values)
{
boolean[] valueIsNull = valueIsNullOptional.orElse(null);
validateConstructorArguments(0, positionCount, valueIsNull, arrayOffset, values);
// for performance reasons per element checks are only performed on the public construction
for (int i = 0; i < positionCount; i++) {
int offset = arrayOffset[i];
int length = arrayOffset[i + 1] - offset;
if (length < 0) {
throw new IllegalArgumentException(format("Offset is not monotonically ascending. offsets[%s]=%s, offsets[%s]=%s", i, arrayOffset[i], i + 1, arrayOffset[i + 1]));
}
if (valueIsNull != null && valueIsNull[i] && length != 0) {
throw new IllegalArgumentException("A null array must have zero entries");
}
}
return new ArrayBlock(0, positionCount, valueIsNull, arrayOffset, values);
}
/**
* Create an array block directly without per element validations.
*/
static ArrayBlock createArrayBlockInternal(int arrayOffset, int positionCount, @Nullable boolean[] valueIsNull, int[] offsets, Block values)
{
validateConstructorArguments(arrayOffset, positionCount, valueIsNull, offsets, values);
return new ArrayBlock(arrayOffset, positionCount, valueIsNull, offsets, values);
}
private static void validateConstructorArguments(int arrayOffset, int positionCount, @Nullable boolean[] valueIsNull, int[] offsets, Block values)
{
if (arrayOffset < 0) {
throw new IllegalArgumentException("arrayOffset is negative");View on GitHub (pinned to 55bb57d202)
Solutions
- Emit equal start/end offsets for null array positions in the producer
- Verify null handling in the block builder or deserializer that produced these arrays
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-common/src/main/java/com/facebook/presto/common/block/ArrayBlock.java:60 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/81dfa6707bc1cbc3.
Report an issue: GitHub.