Extract update in a directory with safer name

This commit is contained in:
woblight
2018-07-22 15:33:48 +02:00
parent a68030ed28
commit 5587ece5f8
2 changed files with 7 additions and 6 deletions
+6 -5
View File
@@ -464,7 +464,7 @@ void Control::executeUpdate()
QuaZip zip("GitAddonsManager.zip"); QuaZip zip("GitAddonsManager.zip");
if (!zip.open(QuaZip::mdUnzip)) if (!zip.open(QuaZip::mdUnzip))
return; return;
QDir root(QApplication::applicationDirPath()); QDir root(QApplication::applicationDirPath() + "/update");
unsigned int size = 0; unsigned int size = 0;
foreach (const QuaZipFileInfo &info, zip.getFileInfoList()) foreach (const QuaZipFileInfo &info, zip.getFileInfoList())
size += info.uncompressedSize; size += info.uncompressedSize;
@@ -473,9 +473,9 @@ void Control::executeUpdate()
foreach (const QuaZipFileInfo &info, zip.getFileInfoList()) { foreach (const QuaZipFileInfo &info, zip.getFileInfoList()) {
QuaZipFile z(zip.getZipName(), info.name); QuaZipFile z(zip.getZipName(), info.name);
z.open(QuaZipFile::ReadOnly); z.open(QuaZipFile::ReadOnly);
QFileInfo finfo(root.absolutePath() + "/" + info.name); QFileInfo finfo(root.absoluteFilePath(info.name.section("/",1)));
QFile f(finfo.absoluteFilePath());
root.mkpath(finfo.absolutePath()); root.mkpath(finfo.absolutePath());
QFile f(finfo.absoluteFilePath());
f.open(QFile::WriteOnly); f.open(QFile::WriteOnly);
QByteArray chunk; QByteArray chunk;
while (!(chunk = z.read(32*1024)).isEmpty()) { while (!(chunk = z.read(32*1024)).isEmpty()) {
@@ -485,10 +485,11 @@ void Control::executeUpdate()
} }
f.close(); f.close();
} }
QFile exe(root.absoluteFilePath("GitAddonsManager"));
exe.setPermissions(QFile::ExeOwner | exe.permissions());
},[this](){ },[this](){
setUpdateStatus(UpdateStatus::UpdateDone); setUpdateStatus(UpdateStatus::UpdateDone);
exit(2); QApplication::exit(2);
}); });
} }
+1 -1
View File
@@ -83,7 +83,7 @@ int main(int argc, char *argv[])
if (res == 2) { if (res == 2) {
QStringList args = app.arguments().mid(1); QStringList args = app.arguments().mid(1);
args << "--update" << QString("\"%1\"").arg(app.applicationDirPath()); args << "--update" << QString("\"%1\"").arg(app.applicationDirPath());
QProcess().startDetached(app.applicationDirPath()+"/GitAddonsManager/GitAddonsManager", args); QProcess().startDetached(app.applicationDirPath()+"/update/GitAddonsManager", args);
} }
if (res == 3) if (res == 3)
QProcess().startDetached(update + "/GitAddonsManager", QApplication::arguments().mid(1) << "--update" << ""); QProcess().startDetached(update + "/GitAddonsManager", QApplication::arguments().mid(1) << "--update" << "");