summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Rex <julian.rex@mapbox.com>2019-09-06 11:00:54 -0400
committerJulian Rex <julian.rex@mapbox.com>2019-09-18 16:50:25 -0400
commitc9d3fcd5ab785e6944c0502a5fa309bc469c4827 (patch)
tree7c71f7bea32c8e1ce204d13603895b827ad09382
parent940b46a42a06a33f26878d4537e4cd574a806aee (diff)
downloadqtlocation-mapboxgl-c9d3fcd5ab785e6944c0502a5fa309bc469c4827.tar.gz
[core] Add catch for malformed offline region def.
-rw-r--r--platform/default/include/mbgl/storage/offline_database.hpp3
-rw-r--r--platform/default/src/mbgl/storage/offline_database.cpp10
2 files changed, 12 insertions, 1 deletions
diff --git a/platform/default/include/mbgl/storage/offline_database.hpp b/platform/default/include/mbgl/storage/offline_database.hpp
index e19dcfade9..303ece3654 100644
--- a/platform/default/include/mbgl/storage/offline_database.hpp
+++ b/platform/default/include/mbgl/storage/offline_database.hpp
@@ -98,7 +98,8 @@ private:
void initialize();
void handleError(const mapbox::sqlite::Exception&, const char* action);
void handleError(const util::IOException&, const char* action);
-
+ void handleError(const std::runtime_error &ex, const char* action);
+
void removeExisting();
void removeOldCacheTable();
void createSchema();
diff --git a/platform/default/src/mbgl/storage/offline_database.cpp b/platform/default/src/mbgl/storage/offline_database.cpp
index 83eea7bcc4..db56e692a7 100644
--- a/platform/default/src/mbgl/storage/offline_database.cpp
+++ b/platform/default/src/mbgl/storage/offline_database.cpp
@@ -124,6 +124,11 @@ void OfflineDatabase::handleError(const util::IOException& ex, const char* actio
Log::Error(Event::Database, ex.code, "Can't %s: %s", action, ex.what());
}
+void OfflineDatabase::handleError(const std::runtime_error &ex, const char* action) {
+ // What else needs to happen here??
+ Log::Error(Event::Database, -1, "Can't %s: %s", action, ex.what());
+}
+
void OfflineDatabase::removeExisting() {
Log::Warning(Event::Database, "Removing existing incompatible offline database");
@@ -1059,6 +1064,11 @@ expected<OfflineRegionDefinition, std::exception_ptr> OfflineDatabase::getRegion
} catch (const mapbox::sqlite::Exception& ex) {
handleError(ex, "load region");
return unexpected<std::exception_ptr>(std::current_exception());
+} catch (const std::runtime_error& ex) {
+ // Catch errors from malformed offline region definitions
+ // and skip them (as above).
+ handleError(ex, "load region");
+ return unexpected<std::exception_ptr>(std::current_exception());
}
expected<OfflineRegionStatus, std::exception_ptr> OfflineDatabase::getRegionCompletedStatus(int64_t regionID) try {