mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-13 11:25:02 -05:00
contrib: use LIEF in macOS symbol checks
This commit is contained in:
parent
a632cbcee5
commit
e93ac26b85
1 changed files with 6 additions and 17 deletions
|
@ -15,6 +15,7 @@ import sys
|
||||||
import os
|
import os
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
|
import lief
|
||||||
import pixie
|
import pixie
|
||||||
|
|
||||||
# Debian 8 (Jessie) EOL: 2020. https://wiki.debian.org/DebianReleases#Production_Releases
|
# Debian 8 (Jessie) EOL: 2020. https://wiki.debian.org/DebianReleases#Production_Releases
|
||||||
|
@ -53,7 +54,6 @@ IGNORE_EXPORTS = {
|
||||||
}
|
}
|
||||||
CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt')
|
CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt')
|
||||||
OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump')
|
OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump')
|
||||||
OTOOL_CMD = os.getenv('OTOOL', '/usr/bin/otool')
|
|
||||||
|
|
||||||
# Allowed NEEDED libraries
|
# Allowed NEEDED libraries
|
||||||
ELF_ALLOWED_LIBRARIES = {
|
ELF_ALLOWED_LIBRARIES = {
|
||||||
|
@ -203,24 +203,13 @@ def check_ELF_libraries(filename) -> bool:
|
||||||
ok = False
|
ok = False
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
def macho_read_libraries(filename) -> List[str]:
|
|
||||||
p = subprocess.Popen([OTOOL_CMD, '-L', filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)
|
|
||||||
(stdout, stderr) = p.communicate()
|
|
||||||
if p.returncode:
|
|
||||||
raise IOError('Error opening file')
|
|
||||||
libraries = []
|
|
||||||
for line in stdout.splitlines():
|
|
||||||
tokens = line.split()
|
|
||||||
if len(tokens) == 1: # skip executable name
|
|
||||||
continue
|
|
||||||
libraries.append(tokens[0].split('/')[-1])
|
|
||||||
return libraries
|
|
||||||
|
|
||||||
def check_MACHO_libraries(filename) -> bool:
|
def check_MACHO_libraries(filename) -> bool:
|
||||||
ok: bool = True
|
ok: bool = True
|
||||||
for dylib in macho_read_libraries(filename):
|
binary = lief.parse(filename)
|
||||||
if dylib not in MACHO_ALLOWED_LIBRARIES:
|
for dylib in binary.libraries:
|
||||||
print('{} is not in ALLOWED_LIBRARIES!'.format(dylib))
|
split = dylib.name.split('/')
|
||||||
|
if split[-1] not in MACHO_ALLOWED_LIBRARIES:
|
||||||
|
print(f'{split[-1]} is not in ALLOWED_LIBRARIES!')
|
||||||
ok = False
|
ok = False
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue