Index: trunk/src/org/openstreetmap/josm/io/OsmPbfReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmPbfReader.java	(revision 19023)
+++ trunk/src/org/openstreetmap/josm/io/OsmPbfReader.java	(revision 19024)
@@ -185,5 +185,7 @@
         int size = Integer.MIN_VALUE;
         Blob.CompressionType type = null;
-        ProtobufRecord current = null;
+        ProtobufRecord current;
+        // Needed since size and compression type + compression data may be in a different order
+        byte [] bytes = null;
         while (parser.hasNext() && cis.getBytesRead() - start < header.dataSize()) {
             current = new ProtobufRecord(baos, parser);
@@ -191,4 +193,5 @@
                 case 1:
                     type = Blob.CompressionType.raw;
+                    bytes = current.getBytes();
                     break;
                 case 2:
@@ -197,16 +200,21 @@
                 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:
@@ -217,5 +225,5 @@
             throw new IllegalStateException("Compression type not found, pbf may be malformed");
         }
-        return new Blob(size, type, current.getBytes());
+        return new Blob(size, type, bytes);
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/gui/io/importexport/OsmPbfImporterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/io/importexport/OsmPbfImporterTest.java	(revision 19023)
+++ trunk/test/unit/org/openstreetmap/josm/gui/io/importexport/OsmPbfImporterTest.java	(revision 19024)
@@ -143,3 +143,19 @@
         assertNotNull(dataSet.getPrimitiveById(9223372036854775806L, OsmPrimitiveType.RELATION));
     }
+
+    /**
+     * Non-regression test for #23550: Error when deserializing PBF blob when generator writes the blob <i>then</i>
+     * the compression type.
+     */
+    @Test
+    void testNonRegression23550() {
+        final byte[] badData = HEADER_DATA.clone();
+        final byte[] sizeInfo = Arrays.copyOfRange(badData, 18, 21);
+        for (int i = 18; i < badData.length - sizeInfo.length; i++) {
+            badData[i] = badData[i + sizeInfo.length];
+        }
+        System.arraycopy(sizeInfo, 0, badData, badData.length - 3, 3);
+        // the data doesn't include any "real" data, but the problematic code path is exercised by the header parsing code.
+        assertDoesNotThrow(() -> importer.parseDataSet(new ByteArrayInputStream(badData), NullProgressMonitor.INSTANCE));
+    }
 }
