Index: src/org/openstreetmap/josm/io/OsmPbfReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmPbfReader.java	(revision 19032)
+++ src/org/openstreetmap/josm/io/OsmPbfReader.java	(working copy)
@@ -15,9 +15,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import jakarta.annotation.Nonnull;
-import jakarta.annotation.Nullable;
-
 import org.apache.commons.compress.utils.CountingInputStream;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.DataSource;
@@ -44,6 +41,9 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.Utils;
 
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+
 /**
  * Read OSM data from an OSM PBF file
  * @since 18695
@@ -578,13 +578,11 @@
             long lon = 0;
             for (int i = 0; i < ids.length; i++) {
                 final NodeData node;
+                id += ids[i];
+                node = new NodeData(id);
                 if (denseInfo != null) {
                     Info info = denseInfo[i];
-                    id += ids[i];
-                    node = new NodeData(id);
                     setOsmPrimitiveData(primitiveBlockRecord, node, info);
-                } else {
-                    node = new NodeData(ids[i]);
                 }
                 lat += lats[i];
                 lon += lons[i];
@@ -795,7 +793,7 @@
                         userSid = protobufRecord.asUnsignedVarInt().intValue();
                         break;
                     case 6:
-                        visible = protobufRecord.asUnsignedVarInt().byteValue() == 0;
+                        visible = protobufRecord.asUnsignedVarInt().byteValue() == 1;
                         break;
                     default: // Fall through, since the PBF format could be extended
                 }
@@ -946,8 +944,7 @@
                 }
             }
         }
-        if (version.length == timestamp.length && timestamp.length == changeset.length && changeset.length == uid.length &&
-                uid.length == userSid.length && (visible == EMPTY_LONG || visible.length == userSid.length)) {
+        if (version.length > 0) {
             Info[] infos = new Info[version.length];
             long lastTimestamp = 0; // delta encoded
             long lastChangeset = 0; // delta encoded
@@ -954,10 +951,14 @@
             long lastUid = 0; // delta encoded,
             long lastUserSid = 0; // delta encoded, string id for username
             for (int i = 0; i < version.length; i++) {
-                lastTimestamp += timestamp[i];
-                lastChangeset += changeset[i];
-                lastUid += uid[i];
-                lastUserSid += userSid[i];
+                if (timestamp.length > i)
+                    lastTimestamp += timestamp[i];
+                if (changeset.length > i)
+                    lastChangeset += changeset[i];
+                if (uid.length > i && userSid.length > i) {
+                    lastUid += uid[i];
+                    lastUserSid += userSid[i];
+                }
                 infos[i] = new Info((int) version[i], lastTimestamp, lastChangeset, (int) lastUid, (int) lastUserSid,
                         visible == EMPTY_LONG || visible[i] == 1);
             }
