diff --git a/src/core/song.cpp b/src/core/song.cpp index f001b555f..dd2240084 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -1059,12 +1059,16 @@ void Song::BindToQuery(QSqlQuery *query) const { query->bindValue(":source", d->source_); query->bindValue(":directory_id", notnullintval(d->directory_id_)); - if (Application::kIsPortable && Utilities::UrlOnSameDriveAsStrawberry(d->url_)) { - query->bindValue(":filename", Utilities::GetRelativePathToStrawberryBin(d->url_).toEncoded()); - } - else { - query->bindValue(":filename", d->url_.toEncoded()); + QString url; + if (d->url_.isValid()) { + if (Application::kIsPortable && Utilities::UrlOnSameDriveAsStrawberry(d->url_)) { + url = Utilities::GetRelativePathToStrawberryBin(d->url_).toEncoded(); + } + else { + url = d->url_.toEncoded(); + } } + query->bindValue(":filename", url); query->bindValue(":filetype", d->filetype_); query->bindValue(":filesize", notnullintval(d->filesize_)); diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp index 063233ee7..47073e3fb 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp @@ -644,7 +644,7 @@ bool IsLaptop() { bool UrlOnSameDriveAsStrawberry(const QUrl &url) { - if (url.scheme() != "file") return false; + if (!url.isValid() || url.scheme() != "file" || url.toLocalFile().isEmpty()) return false; #ifdef Q_OS_WIN QUrl appUrl = QUrl::fromLocalFile(QCoreApplication::applicationDirPath()); @@ -660,6 +660,7 @@ bool UrlOnSameDriveAsStrawberry(const QUrl &url) { } QUrl GetRelativePathToStrawberryBin(const QUrl &url) { + if (!url.isValid()) return QUrl(); QDir appPath(QCoreApplication::applicationDirPath()); return QUrl::fromLocalFile(appPath.relativeFilePath(url.toLocalFile())); }