Merge branch 'hedger/fbt_tarfix' into dev

This commit is contained in:
MX 2022-10-13 17:48:16 +03:00
commit ff52f7d9ba
No known key found for this signature in database
GPG key ID: 6C4C311DFD4B4AB5

View file

@ -22,6 +22,7 @@ class Main(App):
RESOURCE_TAR_MODE = "w:"
RESOURCE_TAR_FORMAT = tarfile.USTAR_FORMAT
RESOURCE_FILE_NAME = "resources.tar"
RESOURCE_ENTRY_NAME_MAX_LENGTH = 100
WHITELISTED_STACK_TYPES = set(
map(
@ -120,9 +121,10 @@ class Main(App):
)
if self.args.resources:
resources_basename = self.RESOURCE_FILE_NAME
self.package_resources(
if not self.package_resources(
self.args.resources, join(self.args.directory, resources_basename)
)
):
return 3
if not self.layout_check(dfu_size, radio_addr):
self.logger.warn("Memory layout looks suspicious")
@ -199,11 +201,28 @@ class Main(App):
"Please confirm that you REALLY want to do that with --I-understand-what-I-am-doing=yes"
)
def _tar_filter(self, tarinfo: tarfile.TarInfo):
if len(tarinfo.name) > self.RESOURCE_ENTRY_NAME_MAX_LENGTH:
self.logger.error(
f"Cannot package resource: name '{tarinfo.name}' too long"
)
raise ValueError("Resource name too long")
return tarinfo
def package_resources(self, srcdir: str, dst_name: str):
try:
with tarfile.open(
dst_name, self.RESOURCE_TAR_MODE, format=self.RESOURCE_TAR_FORMAT
) as tarball:
tarball.add(srcdir, arcname="")
tarball.add(
srcdir,
arcname="",
filter=self._tar_filter,
)
return True
except ValueError as e:
self.logger.error(f"Cannot package resources: {e}")
return False
@staticmethod
def copro_version_as_int(coprometa, stacktype):