Ticket #19551: 19551.patch

File 19551.patch, 3.8 KB (added by taylor.smock, 14 months ago)

Avoid crashing by checking for a null object

  • src/org/openstreetmap/josm/tools/ImageProvider.java

     
    16001600        if (primitive.isTagged() && (!options.contains(GetPaddedOptions.NO_WAY_PRESETS) || OsmPrimitiveType.WAY != primitive.getType())) {
    16011601            final Optional<ImageIcon> icon = TaggingPresets.getMatchingPresets(primitive).stream()
    16021602                    .sorted(Comparator.comparing(p ->
    1603                             p.iconName.contains("multipolygon") || p.types == null || p.types.isEmpty() ? Integer.MAX_VALUE : p.types.size()))
     1603                            p.iconName != null && p.iconName.contains("multipolygon") || p.types == null || p.types.isEmpty() ? Integer.MAX_VALUE : p.types.size()))
    16041604                    .map(TaggingPreset::getImageResource)
    16051605                    .filter(Objects::nonNull)
    16061606                    .map(resource -> resource.getPaddedIcon(iconSize))
  • test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java

     
    66import static org.junit.Assert.assertFalse;
    77import static org.junit.Assert.assertNotNull;
    88import static org.junit.Assert.assertTrue;
     9import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
    910
    1011import java.awt.Color;
    1112import java.awt.Dimension;
     13import java.awt.Graphics;
    1214import java.awt.GraphicsEnvironment;
    1315import java.awt.GridLayout;
    14 import java.awt.Graphics;
    1516import java.awt.Image;
    1617import java.awt.Point;
    1718import java.awt.Toolkit;
     
    2122import java.awt.image.BufferedImage;
    2223import java.io.File;
    2324import java.io.IOException;
     25import java.util.Arrays;
     26import java.util.Collections;
    2427import java.util.List;
    2528import java.util.logging.Handler;
    2629import java.util.logging.LogRecord;
     
    3740import org.junit.Test;
    3841import org.openstreetmap.josm.JOSMFixture;
    3942import org.openstreetmap.josm.TestUtils;
     43import org.openstreetmap.josm.data.coor.LatLon;
     44import org.openstreetmap.josm.data.osm.Node;
     45import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     46import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
     47import org.openstreetmap.josm.gui.tagging.presets.items.Key;
    4048import org.openstreetmap.josm.testutils.JOSMTestRules;
     49import org.xml.sax.SAXException;
    4150
    4251import com.kitfox.svg.SVGConst;
    4352
     
    4756 * Unit tests of {@link ImageProvider} class.
    4857 */
    4958public class ImageProviderTest {
    50    
     59
    5160    /**
    5261     * Setup test.
    5362     */
     
    128137    }
    129138
    130139    /**
     140     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/19551">#19551</a>
     141     * @throws SAXException If the type cannot be set (shouldn't throw)
     142     */
     143    @Test
     144    public void testTicket19551() throws SAXException {
     145        TaggingPreset badPreset = new TaggingPreset();
     146        badPreset.setType("node,way,relation,closedway");
     147        Key key = new Key();
     148        key.key = "amenity";
     149        key.value = "fuel";
     150        badPreset.data.add(key);
     151        TaggingPreset goodPreset = new TaggingPreset();
     152        goodPreset.setType("node,way,relation,closedway");
     153        goodPreset.data.add(key);
     154        goodPreset.iconName = "stop";
     155        TaggingPresets.addTaggingPresets(Arrays.asList(goodPreset, badPreset));
     156        Node node = new Node(LatLon.ZERO);
     157        node.put("amenity", "fuel");
     158        assertDoesNotThrow(() -> ImageProvider.getPadded(node, ImageProvider.ImageSizes.MAP.getImageDimension(), Collections.emptyList()));
     159    }
     160
     161    /**
    131162     * Test fetching an image using {@code wiki://} protocol.
    132163     */
    133164    @Test