Ticket #23599: 23599.patch

File 23599.patch, 3.3 KB (added by GerdP, 6 weeks ago)
  • src/org/openstreetmap/josm/io/OsmPbfReader.java

     
    1515import java.util.Map;
    1616import java.util.Set;
    1717
    18 import jakarta.annotation.Nonnull;
    19 import jakarta.annotation.Nullable;
    20 
    2118import org.apache.commons.compress.utils.CountingInputStream;
    2219import org.openstreetmap.josm.data.Bounds;
    2320import org.openstreetmap.josm.data.DataSource;
     
    4441import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4542import org.openstreetmap.josm.tools.Utils;
    4643
     44import jakarta.annotation.Nonnull;
     45import jakarta.annotation.Nullable;
     46
    4747/**
    4848 * Read OSM data from an OSM PBF file
    4949 * @since 18695
     
    578578            long lon = 0;
    579579            for (int i = 0; i < ids.length; i++) {
    580580                final NodeData node;
     581                id += ids[i];
     582                node = new NodeData(id);
    581583                if (denseInfo != null) {
    582584                    Info info = denseInfo[i];
    583                     id += ids[i];
    584                     node = new NodeData(id);
    585585                    setOsmPrimitiveData(primitiveBlockRecord, node, info);
    586                 } else {
    587                     node = new NodeData(ids[i]);
    588586                }
    589587                lat += lats[i];
    590588                lon += lons[i];
     
    795793                        userSid = protobufRecord.asUnsignedVarInt().intValue();
    796794                        break;
    797795                    case 6:
    798                         visible = protobufRecord.asUnsignedVarInt().byteValue() == 0;
     796                        visible = protobufRecord.asUnsignedVarInt().byteValue() == 1;
    799797                        break;
    800798                    default: // Fall through, since the PBF format could be extended
    801799                }
     
    946944                }
    947945            }
    948946        }
    949         if (version.length == timestamp.length && timestamp.length == changeset.length && changeset.length == uid.length &&
    950                 uid.length == userSid.length && (visible == EMPTY_LONG || visible.length == userSid.length)) {
     947        if (version.length > 0) {
    951948            Info[] infos = new Info[version.length];
    952949            long lastTimestamp = 0; // delta encoded
    953950            long lastChangeset = 0; // delta encoded
     
    954951            long lastUid = 0; // delta encoded,
    955952            long lastUserSid = 0; // delta encoded, string id for username
    956953            for (int i = 0; i < version.length; i++) {
    957                 lastTimestamp += timestamp[i];
    958                 lastChangeset += changeset[i];
    959                 lastUid += uid[i];
    960                 lastUserSid += userSid[i];
     954                if (timestamp.length > i)
     955                    lastTimestamp += timestamp[i];
     956                if (changeset.length > i)
     957                    lastChangeset += changeset[i];
     958                if (uid.length > i && userSid.length > i) {
     959                    lastUid += uid[i];
     960                    lastUserSid += userSid[i];
     961                }
    961962                infos[i] = new Info((int) version[i], lastTimestamp, lastChangeset, (int) lastUid, (int) lastUserSid,
    962963                        visible == EMPTY_LONG || visible[i] == 1);
    963964            }