Extract update in a directory with safer name
This commit is contained in:
+6
-5
@@ -464,7 +464,7 @@ void Control::executeUpdate()
|
||||
QuaZip zip("GitAddonsManager.zip");
|
||||
if (!zip.open(QuaZip::mdUnzip))
|
||||
return;
|
||||
QDir root(QApplication::applicationDirPath());
|
||||
QDir root(QApplication::applicationDirPath() + "/update");
|
||||
unsigned int size = 0;
|
||||
foreach (const QuaZipFileInfo &info, zip.getFileInfoList())
|
||||
size += info.uncompressedSize;
|
||||
@@ -473,9 +473,9 @@ void Control::executeUpdate()
|
||||
foreach (const QuaZipFileInfo &info, zip.getFileInfoList()) {
|
||||
QuaZipFile z(zip.getZipName(), info.name);
|
||||
z.open(QuaZipFile::ReadOnly);
|
||||
QFileInfo finfo(root.absolutePath() + "/" + info.name);
|
||||
QFile f(finfo.absoluteFilePath());
|
||||
QFileInfo finfo(root.absoluteFilePath(info.name.section("/",1)));
|
||||
root.mkpath(finfo.absolutePath());
|
||||
QFile f(finfo.absoluteFilePath());
|
||||
f.open(QFile::WriteOnly);
|
||||
QByteArray chunk;
|
||||
while (!(chunk = z.read(32*1024)).isEmpty()) {
|
||||
@@ -485,10 +485,11 @@ void Control::executeUpdate()
|
||||
}
|
||||
f.close();
|
||||
}
|
||||
|
||||
QFile exe(root.absoluteFilePath("GitAddonsManager"));
|
||||
exe.setPermissions(QFile::ExeOwner | exe.permissions());
|
||||
},[this](){
|
||||
setUpdateStatus(UpdateStatus::UpdateDone);
|
||||
exit(2);
|
||||
QApplication::exit(2);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ int main(int argc, char *argv[])
|
||||
if (res == 2) {
|
||||
QStringList args = app.arguments().mid(1);
|
||||
args << "--update" << QString("\"%1\"").arg(app.applicationDirPath());
|
||||
QProcess().startDetached(app.applicationDirPath()+"/GitAddonsManager/GitAddonsManager", args);
|
||||
QProcess().startDetached(app.applicationDirPath()+"/update/GitAddonsManager", args);
|
||||
}
|
||||
if (res == 3)
|
||||
QProcess().startDetached(update + "/GitAddonsManager", QApplication::arguments().mid(1) << "--update" << "");
|
||||
|
||||
Reference in New Issue
Block a user