App: Handle possibly raised exception in ZipFile constructor

This fixes the issue reported at:
https://forum.freecad.org/viewtopic.php?t=93619
This commit is contained in:
wmayer
2025-01-06 14:42:32 +01:00
committed by Ladislav Michl
parent c74752c526
commit 58ba945659

View File

@@ -66,6 +66,26 @@ using namespace App;
namespace
{
class ZipTools
{
public:
static std::unique_ptr<zipios::ZipFile> open(const std::string& file)
{
std::unique_ptr<zipios::ZipFile> project;
try {
project = std::make_unique<zipios::ZipFile>(file);
if (!project->isValid()) {
project.reset();
}
}
catch (const std::exception&) {
}
return project;
}
};
class DocumentMetadata
{
public:
@@ -212,11 +232,12 @@ bool ProjectFile::loadDocument()
return true; // already loaded
}
zipios::ZipFile project(stdFile);
if (!project.isValid()) {
auto project = ZipTools::open(stdFile);
if (!project) {
return false;
}
std::unique_ptr<std::istream> str(project.getInputStream("Document.xml"));
std::unique_ptr<std::istream> str(project->getInputStream("Document.xml"));
if (str) {
std::unique_ptr<XercesDOMParser> parser(new XercesDOMParser);
parser->setValidationScheme(XercesDOMParser::Val_Auto);