prestodb/presto · error · IllegalArgumentException

Invalid uncompressedSize for GZIP input. Expected %s, actual

Error message

Invalid uncompressedSize for GZIP input. Expected %s, actual: %s

What it means

Post-decompression consistency check in decompressGzip: the Parquet page header declares an uncompressedSize, but the GZIP stream decompressed to a different byte count (either the decompressed data ended early/overflowed). This means the page header or the compressed payload is corrupt, or the file was written by a nonconforming writer.

Source

Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCompressionUtils.java:107

        }

        byte[] buffer = new byte[uncompressedSize];
        int bytesRead = 0;
        boolean eos = false;
        try (GZIPInputStream gzipInputStream = new GZIPInputStream(input.getInput(), min(GZIP_BUFFER_SIZE, input.length()))) {
            int n;
            do {
                n = gzipInputStream.read(buffer, bytesRead, buffer.length - bytesRead);
                if (n < 0) {
                    eos = true;
                    break;
                }
                bytesRead += n;
            } while (bytesRead < buffer.length);
            checkArgument(eos || gzipInputStream.read() == -1, "Invalid uncompressedSize for GZIP input. Actual size exceeds %s bytes", uncompressedSize);
        }
        if (bytesRead != uncompressedSize) {
            throw new IllegalArgumentException(format("Invalid uncompressedSize for GZIP input. Expected %s, actual: %s", uncompressedSize, bytesRead));
        }
        return wrappedBuffer(buffer, 0, bytesRead);
    }

    private static Slice decompressLz4(Slice input, int uncompressedSize)
    {
        return decompressFramed(new Lz4Decompressor(), input, uncompressedSize);
    }

    private static Slice decompressLZO(Slice input, int uncompressedSize)
    {
        return decompressFramed(new LzoDecompressor(), input, uncompressedSize);
    }

    private static Slice decompressFramed(Decompressor decompressor, Slice input, int uncompressedSize)
    {
        long totalDecompressedCount = 0;
        // over allocate buffer which makes decompression easier

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Regenerate the Parquet file with a conforming writer (verify sizes match)
  2. Verify file transfer/storage integrity — checksum the object
  3. Check for mixed gzip members or truncated streams; if intended, split pages so sizes agree
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCompressionUtils.java:107 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/7bd3234401361954. Report an issue: GitHub.