Addon Manager: Don't crash on bad XML
Wrap all metadata reads in try/except blocks and gracefully bail out if the data is bad.
This commit is contained in:
@@ -33,6 +33,7 @@ import stat
|
||||
import threading
|
||||
import time
|
||||
from typing import List
|
||||
import xml.etree.ElementTree
|
||||
|
||||
from PySide import QtCore
|
||||
|
||||
@@ -44,6 +45,7 @@ from AddonStats import AddonStats
|
||||
import NetworkManager
|
||||
from addonmanager_git import initialize_git, GitFailed
|
||||
from addonmanager_metadata import MetadataReader, get_branch_from_metadata
|
||||
import addonmanager_freecad_interface as fci
|
||||
|
||||
translate = FreeCAD.Qt.translate
|
||||
|
||||
@@ -193,10 +195,18 @@ class CreateAddonListWorker(QtCore.QThread):
|
||||
repo = Addon(name, addon["url"], state, addon["branch"])
|
||||
md_file = os.path.join(addondir, "package.xml")
|
||||
if os.path.isfile(md_file):
|
||||
repo.installed_metadata = MetadataReader.from_file(md_file)
|
||||
repo.installed_version = repo.installed_metadata.version
|
||||
repo.updated_timestamp = os.path.getmtime(md_file)
|
||||
repo.verify_url_and_branch(addon["url"], addon["branch"])
|
||||
try:
|
||||
repo.installed_metadata = MetadataReader.from_file(md_file)
|
||||
repo.installed_version = repo.installed_metadata.version
|
||||
repo.updated_timestamp = os.path.getmtime(md_file)
|
||||
repo.verify_url_and_branch(addon["url"], addon["branch"])
|
||||
except xml.etree.ElementTree.ParseError:
|
||||
fci.Console.PrintWarning(
|
||||
"An invalid or corrupted package.xml file was installed for"
|
||||
)
|
||||
fci.Console.PrintWarning(
|
||||
f" custom addon {self.name}... ignoring the bad data.\n"
|
||||
)
|
||||
|
||||
self.addon_repo.emit(repo)
|
||||
|
||||
@@ -236,10 +246,16 @@ class CreateAddonListWorker(QtCore.QThread):
|
||||
repo = Addon(name, url, state, branch)
|
||||
md_file = os.path.join(addondir, "package.xml")
|
||||
if os.path.isfile(md_file):
|
||||
repo.installed_metadata = MetadataReader.from_file(md_file)
|
||||
repo.installed_version = repo.installed_metadata.version
|
||||
repo.updated_timestamp = os.path.getmtime(md_file)
|
||||
repo.verify_url_and_branch(url, branch)
|
||||
try:
|
||||
repo.installed_metadata = MetadataReader.from_file(md_file)
|
||||
repo.installed_version = repo.installed_metadata.version
|
||||
repo.updated_timestamp = os.path.getmtime(md_file)
|
||||
repo.verify_url_and_branch(url, branch)
|
||||
except xml.etree.ElementTree.ParseError:
|
||||
fci.Console.PrintWarning(
|
||||
"An invalid or corrupted package.xml file was installed for"
|
||||
)
|
||||
fci.Console.PrintWarning(f" addon {self.name}... ignoring the bad data.\n")
|
||||
|
||||
if name in self.py2only:
|
||||
repo.python2 = True
|
||||
|
||||
Reference in New Issue
Block a user