# HG changeset patch # User Sebastian Kruse # Date 1354118449 -3600 # Node ID 4711c4ab0c23b227d0810f9bc37ff588b9e8c5ce # Parent 6ec1ab4f897adddabd0093af957fdde226c1d74e Improved robustness of KML parsing (with Firefox and probably other browsers a missing node can lead to a NullPointerException that will not be catched by the try/catch) diff -r 6ec1ab4f897a -r 4711c4ab0c23 war/scripts/sti/STICore.js --- a/war/scripts/sti/STICore.js Wed Nov 28 16:56:38 2012 +0100 +++ b/war/scripts/sti/STICore.js Wed Nov 28 17:00:49 2012 +0100 @@ -338,25 +338,40 @@ var placemark = elements[i]; var name, description, place, timeData, coordinates, timeStamp, timeSpan, g; - - try { - name = placemark.getElementsByTagName("name")[0].childNodes[0].nodeValue; - } - catch(e){ + + try{ + var nameElement = placemark.getElementsByTagName("name"); + if ( (nameElement != null) && (nameElement.length > 0) && (nameElement[0].childNodes.length > 0) ){ + name = nameElement[0].childNodes[0].nodeValue; + } + else { + name = ""; + } + } catch(e) { name = ""; } - - try { - description = placemark.getElementsByTagName("description")[0].childNodes[0].nodeValue; - } - catch(e){ + + try{ + var descriptionElement = placemark.getElementsByTagName("description"); + if ( (descriptionElement != null) && (descriptionElement.length > 0) && (descriptionElement[0].childNodes.length > 0) ){ + description = descriptionElement[0].childNodes[0].nodeValue; + } + else { + description = ""; + } + } catch(e) { description = ""; } - - try { - place = placemark.getElementsByTagName("address")[0].childNodes[0].nodeValue; - } - catch(e){ + + try{ + var placeElement = placemark.getElementsByTagName("address"); + if ( (placeElement != null) && (placeElement.length > 0) && (placeElement[0].childNodes.length > 0) ){ + place = placeElement[0].childNodes[0].nodeValue; + } + else { + place = ""; + } + } catch(e) { place = ""; }