From 99fe27237e572829c099a409fd85eef98fa4ffb5 Mon Sep 17 00:00:00 2001 From: Marcus Lundblad Date: Fri, 15 Feb 2019 22:46:50 +0100 Subject: [PATCH 1/3] geoJSONSource: Pass tile to idle callback Pass the tile to the idle callback in the fill_tile vfunc implementation. Avoids use-after free from JS code. --- src/geoJSONSource.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/geoJSONSource.js b/src/geoJSONSource.js index 5f9c26e2..4c596c22 100644 --- a/src/geoJSONSource.js +++ b/src/geoJSONSource.js @@ -86,7 +86,7 @@ class GeoJSONSource extends Champlain.TileSource { this.next_source.fill_tile(tile); }); - Mainloop.idle_add(() => this._renderTile(tile)); + Mainloop.idle_add(() => this._renderTile(tile), tile); } _validate([lon, lat]) { -- GitLab From 915e2c4977de5f3a453b0c91650316e0a0bf2e41 Mon Sep 17 00:00:00 2001 From: Marcus Lundblad Date: Fri, 15 Feb 2019 22:48:15 +0100 Subject: [PATCH 2/3] gpxShapeLayer: Use util function to get string from buffer --- src/gpxShapeLayer.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gpxShapeLayer.js b/src/gpxShapeLayer.js index 6154b825..e3a23b99 100644 --- a/src/gpxShapeLayer.js +++ b/src/gpxShapeLayer.js @@ -21,6 +21,7 @@ const GObject = imports.gi.GObject; const GeoJSONSource = imports.geoJSONSource; const ShapeLayer = imports.shapeLayer; +const Utils = imports.utils; const Togeojson = imports.togeojson.togeojson; const Domparser = imports.xmldom.domparser; @@ -37,7 +38,7 @@ class GpxShapeLayer extends ShapeLayer.ShapeLayer { } _parseContent() { - let s = this._fileContents.toString(); + let s = Utils.getBufferText(this._fileContents); let parser = new Domparser.DOMParser(); let json = Togeojson.toGeoJSON.gpx(parser.parseFromString(s)); this._mapSource.parse(json); -- GitLab From 1fa7a28a55254084e9eecd0fca56f8c2f8b97020 Mon Sep 17 00:00:00 2001 From: Marcus Lundblad Date: Fri, 15 Feb 2019 22:51:23 +0100 Subject: [PATCH 3/3] kmlShapeLayer: Use util function to get string from buffer --- src/kmlShapeLayer.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/kmlShapeLayer.js b/src/kmlShapeLayer.js index ea13a7f4..c7ef0a1f 100644 --- a/src/kmlShapeLayer.js +++ b/src/kmlShapeLayer.js @@ -21,6 +21,7 @@ const GObject = imports.gi.GObject; const GeoJSONSource = imports.geoJSONSource; const ShapeLayer = imports.shapeLayer; +const Utils = imports.utils; const Togeojson = imports.togeojson.togeojson; const Domparser = imports.xmldom.domparser; @@ -36,7 +37,7 @@ class KmlShapeLayer extends ShapeLayer.ShapeLayer { } _parseContent() { - let s = this._fileContents.toString(); + let s = Utils.getBufferText(this._fileContents); let parser = new Domparser.DOMParser(); let json = Togeojson.toGeoJSON.kml(parser.parseFromString(s)); this._mapSource.parse(json); -- GitLab