File size: 1,469 Bytes
05bfdef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | """
Llama a load_model() de la libc_wrapper.dll recien compilada sobre el fichero .surml
malicioso (malicious_nul_name.surml, generado por craft_malicious_surml.py) para confirmar
si el proceso aborta (Candidato 1 de focus-02-c-wrapper-ffi.md) en vez de devolver un
FileInfo con is_error=1.
Se ejecuta como proceso HIJO separado (ver run_trigger.py) precisamente porque si el bug es
real, este proceso Python entero morira sin excepcion capturable.
"""
import ctypes
from ctypes import Structure, c_char_p, c_int
import os
DLL_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "repo", "target", "release", "c_wrapper.dll"))
class FileInfo(Structure):
_fields_ = [
("file_id", c_char_p),
("name", c_char_p),
("description", c_char_p),
("version", c_char_p),
("error_message", c_char_p),
("is_error", c_int),
]
lib = ctypes.CDLL(DLL_PATH)
lib.load_model.argtypes = [c_char_p]
lib.load_model.restype = FileInfo
print("Antes de load_model() -- si el proceso muere aqui sin imprimir la linea de abajo, "
"confirma el abort no capturable.")
outcome = lib.load_model(os.path.abspath("malicious_nul_name.surml").encode("utf-8"))
print("DESPUES de load_model() -- NO abortó.")
print(f"is_error={outcome.is_error}")
if outcome.is_error:
print(f"error_message={outcome.error_message.decode('utf-8', errors='replace')}")
else:
print(f"file_id={outcome.file_id}, name={outcome.name}")
|