safe handling of malformed databases
This commit is contained in:
+15
-9
@@ -365,18 +365,24 @@ MBTiles.prototype.getInfo = function(callback) {
|
|||||||
},
|
},
|
||||||
// Determine min/max zoom if needed
|
// Determine min/max zoom if needed
|
||||||
function(err) {
|
function(err) {
|
||||||
if (err) return callback(err);
|
if (err && err.errno !== 1) return callback(err);
|
||||||
if (info.maxzoom !== undefined
|
if (info.maxzoom !== undefined
|
||||||
&& info.minzoom !== undefined) return this();
|
&& info.minzoom !== undefined) return this();
|
||||||
|
|
||||||
var group = this.group();
|
var step = this;
|
||||||
|
|
||||||
var zoomquery = that.db.prepare('SELECT zoom_level FROM tiles ' +
|
var zoomquery = that.db.prepare('SELECT zoom_level FROM tiles ' +
|
||||||
'WHERE zoom_level = ? LIMIT 1');
|
'WHERE zoom_level = ? LIMIT 1', function(err) {
|
||||||
for (var i = 0; i < 30; i++) {
|
if (err) {
|
||||||
zoomquery.get(i, group());
|
if (err.errno === 1) step();
|
||||||
}
|
else throw new Error(err);
|
||||||
zoomquery.finalize();
|
} else {
|
||||||
|
var group = step.group();
|
||||||
|
for (var i = 0; i < 30; i++) {
|
||||||
|
zoomquery.get(i, group());
|
||||||
|
}
|
||||||
|
zoomquery.finalize();
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
function(err, rows) {
|
function(err, rows) {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
@@ -434,7 +440,7 @@ MBTiles.prototype.getInfo = function(callback) {
|
|||||||
var range = parseInt(info.maxzoom, 10) - parseInt(info.minzoom, 10);
|
var range = parseInt(info.maxzoom, 10) - parseInt(info.minzoom, 10);
|
||||||
info.minzoom = parseInt(info.minzoom, 10);
|
info.minzoom = parseInt(info.minzoom, 10);
|
||||||
info.maxzoom = parseInt(info.maxzoom, 10);
|
info.maxzoom = parseInt(info.maxzoom, 10);
|
||||||
info.bounds = _(info.bounds.split(',')).map(parseFloat);
|
info.bounds = _((info.bounds || '').split(',')).map(parseFloat);
|
||||||
info.center = [
|
info.center = [
|
||||||
(info.bounds[2] - info.bounds[0]) / 2 + info.bounds[0],
|
(info.bounds[2] - info.bounds[0]) / 2 + info.bounds[0],
|
||||||
(info.bounds[3] - info.bounds[1]) / 2 + info.bounds[1],
|
(info.bounds[3] - info.bounds[1]) / 2 + info.bounds[1],
|
||||||
|
|||||||
Reference in New Issue
Block a user