Add logic to warn if tar compression format is unknown, or not supported by WSL1 (#12466)

Blue committed Jan 15, 2025 at 12:44 UTC f007ede7ad0684080e2dc9a97a1296b88f95e9fd
1 file changed +14 -1
distributions/validate-modern.py
+14 -1
@@ -18,6 +18,8 @@ MAGIC = magic.Magic()
18 X64_ELF_MAGIC = re.compile('^ELF 64-bit.* x86-64, version 1')
19 ARM64_ELF_MAGIC = re.compile('^ELF 64-bit.* ARM aarch64, version 1')
20
21 +KNOWN_TAR_FORMATS = {'^XZ compressed data.*': False, '^gzip compressed data.*': True}
22 +
23 DISCOURAGED_SYSTEM_UNITS = ['systemd-resolved.service',
24 'systemd-networkd.service',
25 'systemd-tmpfiles-setup.service',
@@ -406,6 +408,7 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
408 if not url['Url'].endswith('.wsl'):
409 warning(flavor, name, f'Url does not point to a .wsl file: {url["Url"]}')
410
411 + tar_format = None
412 if url['Url'].startswith('file://'):
413 with open(url['Url'].replace('file:///', '').replace('file://', ''), 'rb') as fd:
414 while True:
@@ -415,6 +418,9 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
418
419 hash.update(e)
420
421 + if tar_format is None:
422 + tar_format = MAGIC.from_buffer(e)
423 +
424 fd.seek(0, 0)
425 read_tar(flavor, name, fd, elf_magic)
426 else:
@@ -426,6 +432,9 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
432 file.write(e)
433 hash.update(e)
434
435 + if tar_format is None:
436 + tar_format = MAGIC.from_buffer(e)
437 +
438 file.seek(0, 0)
439 read_tar(flavor, name, file, elf_magic)
440
@@ -443,7 +452,11 @@ def read_url(flavor: str, name: str, url: dict, elf_magic):
452 else:
453 click.secho(f'Hash for {url["Url"]} matches ({expected_sha})', fg='green')
454
446 -
455 + known_format = next((value for key, value in KNOWN_TAR_FORMATS.items() if re.match(key, tar_format)), None)
456 + if known_format is None:
457 + error(flavor, name, f'Unknown tar format: {tar_format}')
458 + elif not known_format:
459 + warning(flavor, name, f'Tar format not supported by WSL1: {tar_format}')
460
461 def error(flavor: str, distribution: str, message: str):
462 global errors