[Qt] Fix database timeout not being set correctly

It was overflowing due to long to int conversion inside Qt and
never being effectively set because Qt was silently ignoring
the conversion error and discarding the new value.

Fixes #9108.
This commit is contained in:
Thiago Marcos P. Santos
2017-07-26 15:09:58 +03:00
parent 565dfc9183
commit 55faa23d2e

View File

@@ -11,6 +11,7 @@
#include <cstring>
#include <cstdio>
#include <chrono>
#include <limits>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/logging.hpp>
@@ -141,7 +142,11 @@ Database::~Database() {
void Database::setBusyTimeout(std::chrono::milliseconds timeout) {
assert(impl);
std::string timeoutStr = mbgl::util::toString(timeout.count());
// std::chrono::milliseconds.count() is a long and Qt will cast
// internally to int, so we need to make sure the limits apply.
std::string timeoutStr = mbgl::util::toString(timeout.count() & INT_MAX);
QString connectOptions = impl->db->connectOptions();
if (connectOptions.isEmpty()) {
if (!connectOptions.isEmpty()) connectOptions.append(';');