From d87ca4068103028db0723694d6e535afc113624e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Mon, 27 Jun 2011 19:56:38 +0200 Subject: [PATCH] safe handling of malformed databases --- lib/mbtiles.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index dafc2a5..1210c72 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -365,18 +365,24 @@ MBTiles.prototype.getInfo = function(callback) { }, // Determine min/max zoom if needed function(err) { - if (err) return callback(err); + if (err && err.errno !== 1) return callback(err); if (info.maxzoom !== undefined && info.minzoom !== undefined) return this(); - var group = this.group(); - + var step = this; var zoomquery = that.db.prepare('SELECT zoom_level FROM tiles ' + - 'WHERE zoom_level = ? LIMIT 1'); - for (var i = 0; i < 30; i++) { - zoomquery.get(i, group()); - } - zoomquery.finalize(); + 'WHERE zoom_level = ? LIMIT 1', function(err) { + if (err) { + if (err.errno === 1) step(); + else throw new Error(err); + } else { + var group = step.group(); + for (var i = 0; i < 30; i++) { + zoomquery.get(i, group()); + } + zoomquery.finalize(); + } + }); }, function(err, rows) { if (err) return callback(err); @@ -434,7 +440,7 @@ MBTiles.prototype.getInfo = function(callback) { var range = parseInt(info.maxzoom, 10) - parseInt(info.minzoom, 10); info.minzoom = parseInt(info.minzoom, 10); info.maxzoom = parseInt(info.maxzoom, 10); - info.bounds = _(info.bounds.split(',')).map(parseFloat); + info.bounds = _((info.bounds || '').split(',')).map(parseFloat); info.center = [ (info.bounds[2] - info.bounds[0]) / 2 + info.bounds[0], (info.bounds[3] - info.bounds[1]) / 2 + info.bounds[1],