Ticket #23550: pbf-deserialization-fix.diff
File pbf-deserialization-fix.diff, 3.4 KB (added by , 2 months ago) |
---|
-
src/org/openstreetmap/josm/data/osm/pbf/Blob.java
4 4 import java.io.ByteArrayInputStream; 5 5 import java.io.IOException; 6 6 import java.io.InputStream; 7 import java.util.zip.Inflater; 7 8 import java.util.zip.InflaterInputStream; 8 9 9 10 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; … … 96 97 case lz4: 97 98 throw new IOException(this.compressionType + " pbf is not currently supported"); 98 99 case zlib: 99 return new InflaterInputStream(bais); 100 Inflater inflater = new Inflater(); 101 inflater.setInput(this.bytes, 0, this.bytes.length); 102 return new InflaterInputStream(bais, inflater); 100 103 default: 101 104 throw new IOException("unknown compression type is not currently supported: " + this.compressionType.name()); 102 105 } -
src/org/openstreetmap/josm/io/OsmPbfReader.java
19 19 import jakarta.annotation.Nullable; 20 20 21 21 import org.apache.commons.compress.utils.CountingInputStream; 22 import org.apache.commons.compress.utils.IOUtils; 22 23 import org.openstreetmap.josm.data.Bounds; 23 24 import org.openstreetmap.josm.data.DataSource; 24 25 import org.openstreetmap.josm.data.coor.LatLon; … … 185 186 int size = Integer.MIN_VALUE; 186 187 Blob.CompressionType type = null; 187 188 ProtobufRecord current = null; 189 byte [] bytes = null; 188 190 while (parser.hasNext() && cis.getBytesRead() - start < header.dataSize()) { 189 191 current = new ProtobufRecord(baos, parser); 190 192 switch (current.getField()) { 191 193 case 1: 192 194 type = Blob.CompressionType.raw; 195 bytes = current.getBytes(); 193 196 break; 194 197 case 2: 195 198 size = current.asUnsignedVarInt().intValue(); … … 196 199 break; 197 200 case 3: 198 201 type = Blob.CompressionType.zlib; 202 bytes = current.getBytes(); 199 203 break; 200 204 case 4: 201 205 type = Blob.CompressionType.lzma; 206 bytes = current.getBytes(); 202 207 break; 203 208 case 5: 204 209 type = Blob.CompressionType.bzip2; 210 bytes = current.getBytes(); 205 211 break; 206 212 case 6: 207 213 type = Blob.CompressionType.lz4; 214 bytes = current.getBytes(); 208 215 break; 209 216 case 7: 210 217 type = Blob.CompressionType.zstd; 218 bytes = current.getBytes(); 211 219 break; 212 220 default: 213 221 throw new IllegalStateException("Unknown compression type: " + current.getField()); … … 216 224 if (type == null) { 217 225 throw new IllegalStateException("Compression type not found, pbf may be malformed"); 218 226 } 219 return new Blob(size, type, current.getBytes());227 return new Blob(size, type, bytes); 220 228 } 221 229 222 230 /**