Index: src/org/openstreetmap/josm/data/osm/pbf/Blob.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/pbf/Blob.java	(revision 19017)
+++ src/org/openstreetmap/josm/data/osm/pbf/Blob.java	(working copy)
@@ -4,6 +4,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.zip.Inflater;
 import java.util.zip.InflaterInputStream;
 
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
@@ -96,7 +97,9 @@
             case lz4:
                 throw new IOException(this.compressionType + " pbf is not currently supported");
             case zlib:
-                return new InflaterInputStream(bais);
+                Inflater inflater = new Inflater();
+                inflater.setInput(this.bytes, 0, this.bytes.length);
+                return new InflaterInputStream(bais, inflater);
             default:
                 throw new IOException("unknown compression type is not currently supported: " + this.compressionType.name());
         }
Index: src/org/openstreetmap/josm/io/OsmPbfReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmPbfReader.java	(revision 19017)
+++ src/org/openstreetmap/josm/io/OsmPbfReader.java	(working copy)
@@ -19,6 +19,7 @@
 import jakarta.annotation.Nullable;
 
 import org.apache.commons.compress.utils.CountingInputStream;
+import org.apache.commons.compress.utils.IOUtils;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -185,11 +186,13 @@
         int size = Integer.MIN_VALUE;
         Blob.CompressionType type = null;
         ProtobufRecord current = null;
+        byte [] bytes = null;
         while (parser.hasNext() && cis.getBytesRead() - start < header.dataSize()) {
             current = new ProtobufRecord(baos, parser);
             switch (current.getField()) {
                 case 1:
                     type = Blob.CompressionType.raw;
+                    bytes = current.getBytes();
                     break;
                 case 2:
                     size = current.asUnsignedVarInt().intValue();
@@ -196,18 +199,23 @@
                     break;
                 case 3:
                     type = Blob.CompressionType.zlib;
+                    bytes = current.getBytes();
                     break;
                 case 4:
                     type = Blob.CompressionType.lzma;
+                    bytes = current.getBytes();
                     break;
                 case 5:
                     type = Blob.CompressionType.bzip2;
+                    bytes = current.getBytes();
                     break;
                 case 6:
                     type = Blob.CompressionType.lz4;
+                    bytes = current.getBytes();
                     break;
                 case 7:
                     type = Blob.CompressionType.zstd;
+                    bytes = current.getBytes();
                     break;
                 default:
                     throw new IllegalStateException("Unknown compression type: " + current.getField());
@@ -216,7 +224,7 @@
         if (type == null) {
             throw new IllegalStateException("Compression type not found, pbf may be malformed");
         }
-        return new Blob(size, type, current.getBytes());
+        return new Blob(size, type, bytes);
     }
 
     /**
