Index: trunk/src/org/openstreetmap/josm/io/OsmPbfReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmPbfReader.java	(revision 19029)
+++ trunk/src/org/openstreetmap/josm/io/OsmPbfReader.java	(revision 19033)
@@ -16,7 +16,4 @@
 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;
@@ -31,4 +28,5 @@
 import org.openstreetmap.josm.data.osm.RelationMemberData;
 import org.openstreetmap.josm.data.osm.Tagged;
+import org.openstreetmap.josm.data.osm.UploadPolicy;
 import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.WayData;
@@ -44,4 +42,7 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.Utils;
+
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
 
 /**
@@ -523,4 +524,6 @@
             if (info != null) {
                 setOsmPrimitiveData(primitiveBlockRecord, node, info);
+            } else {
+                ds.setUploadPolicy(UploadPolicy.DISCOURAGED);
             }
             buildPrimitive(node);
@@ -572,4 +575,5 @@
             }
         }
+
         int keyValIndex = 0; // This index must not reset between nodes, and must always increment
         if (ids.length == lats.length && lats.length == lons.length && (denseInfo == null || denseInfo.length == lons.length)) {
@@ -579,11 +583,11 @@
             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]);
+                    ds.setUploadPolicy(UploadPolicy.DISCOURAGED);
                 }
                 lat += lats[i];
@@ -679,4 +683,6 @@
         if (info != null) {
             setOsmPrimitiveData(primitiveBlockRecord, wayData, info);
+        } else {
+            ds.setUploadPolicy(UploadPolicy.DISCOURAGED);
         }
         buildPrimitive(wayData);
@@ -744,4 +750,6 @@
         if (info != null) {
             setOsmPrimitiveData(primitiveBlockRecord, data, info);
+        } else {
+            ds.setUploadPolicy(UploadPolicy.DISCOURAGED);
         }
         addTags(data, keys, values);
@@ -796,5 +804,5 @@
                         break;
                     case 6:
-                        visible = protobufRecord.asUnsignedVarInt().byteValue() == 0;
+                        visible = protobufRecord.asUnsignedVarInt().byteValue() == 1;
                         break;
                     default: // Fall through, since the PBF format could be extended
@@ -947,6 +955,5 @@
             }
         }
-        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
@@ -955,8 +962,12 @@
             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);
