safe handling of malformed databases

This commit is contained in:
Konstantin Käfer
2011-06-27 19:56:38 +02:00
parent 9f08ae3e26
commit d87ca40681
+15 -9
View File
@@ -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],