X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/0272d30b9683fb3a4bb6b63940373b17a5c6cf60..c8ee1351049ef1bb4d7b50d071b2a96154266d1d:/lib/diff_reader.rb?ds=sidebyside diff --git a/lib/diff_reader.rb b/lib/diff_reader.rb index 37de8ea59..217e9309d 100644 --- a/lib/diff_reader.rb +++ b/lib/diff_reader.rb @@ -18,7 +18,7 @@ class DiffReader # in OsmChange format. All diffs must be limited to a single changeset # given in +changeset+. def initialize(data, changeset) - @reader = XML::Reader.new data + @reader = XML::Reader.string(data) @changeset = changeset end @@ -26,11 +26,12 @@ class DiffReader # Reads the next element from the XML document. Checks the return value # and throws an exception if an error occurred. def read_or_die - # NOTE: XML::Reader#read returns 0 for EOF and -1 for error. - # we allow an EOF because we are expecting this to always happen - # at the end of a document. - if @reader.read < 0 - raise APIBadUserInput.new("Unexpected end of XML document.") + # NOTE: XML::Reader#read returns false for EOF and raises an + # exception if an error occurs. + begin + @reader.read + rescue LibXML::XML::Error => ex + raise OSM::APIBadXMLError.new("changeset", xml, ex.message) end end