Ignore:
Timestamp:
2016-03-27T23:17:02+02:00 (9 years ago)
Author:
donvip
Message:

fix #josm12694 - robustness to invalid KML colors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java

    r32127 r32130  
    99import java.util.List;
    1010import java.util.Map;
     11import java.util.regex.Pattern;
    1112
    1213import javax.xml.stream.FactoryConfigurationError;
     
    3233
    3334    public static final String KML_PLACEMARK   = "Placemark";
    34     public static final String KML_NAME           = "name";
     35    public static final String KML_NAME        = "name";
    3536    public static final String KML_COLOR       = "color";
    3637    public static final String KML_SIMPLE_DATA = "SimpleData";
     
    4344    public static final String KML_COORDINATES = "coordinates";
    4445   
     46    public static Pattern COLOR_PATTERN = Pattern.compile("\\p{XDigit}{8}");
    4547
    4648    private XMLStreamReader parser;
     
    5456        InputStreamReader ir = UTFInputStreamReader.create(in);
    5557        XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(ir);
    56         //XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(in, UTF8);
    5758        return new KmlReader(parser).parseDoc();
    5859    }
     
    9293                if (parser.getLocalName().equals(KML_COLOR)) {
    9394                    String s = parser.getElementText();
    94                     // KML color format is aabbggrr, convert it to OSM (web) format: #rrggbb
    95                     String rgbColor = '#'+s.substring(6,8)+s.substring(4,6)+s.substring(2,4);
    96                     tags.put(KML_COLOR, rgbColor);
     95                    if (COLOR_PATTERN.matcher(s).matches()) {
     96                        // KML color format is aabbggrr, convert it to OSM (web) format: #rrggbb
     97                        tags.put(KML_COLOR, '#'+s.substring(6,8)+s.substring(4,6)+s.substring(2,4));
     98                    }
    9799                } else if (parser.getLocalName().equals(KML_NAME)) {
    98100                    tags.put(KML_NAME, parser.getElementText());
Note: See TracChangeset for help on using the changeset viewer.