scripts: gen_app_partitions: do not load empty files
Do not load empty files through the ELF parser and raise exception when
magic number of ELF is not matched.
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
diff --git a/scripts/gen_app_partitions.py b/scripts/gen_app_partitions.py
index 0962a59..e38d7b2 100644
--- a/scripts/gen_app_partitions.py
+++ b/scripts/gen_app_partitions.py
@@ -39,6 +39,7 @@
from collections import OrderedDict
from elftools.elf.elffile import ELFFile
from elftools.elf.sections import SymbolTableSection
+import elftools.common.exceptions
SZ = 'size'
SRC = 'sources'
@@ -109,7 +110,11 @@
def find_obj_file_partitions(filename, partitions):
with open(filename, 'rb') as f:
- full_lib = ELFFile(f)
+ try:
+ full_lib = ELFFile(f)
+ except elftools.common.exceptions.ELFError as e:
+ exit(f"Error: {filename}: {e}")
+
if not full_lib:
sys.exit("Error parsing file: " + filename)
@@ -139,12 +144,17 @@
for filename in files:
if re.match(r".*\.obj$", filename):
fullname = os.path.join(dirpath, filename)
- find_obj_file_partitions(fullname, partitions)
+ fsize = os.path.getsize(fullname)
+ if fsize != 0:
+ find_obj_file_partitions(fullname, partitions)
def parse_elf_file(partitions):
with open(args.elf, 'rb') as f:
- elffile = ELFFile(f)
+ try:
+ elffile = ELFFile(f)
+ except elftools.common.exceptions.ELFError as e:
+ exit(f"Error: {args.elf}: {e}")
symbol_tbls = [s for s in elffile.iter_sections()
if isinstance(s, SymbolTableSection)]