From 105e7180230dc22db91af2c8cbfa6fc3d2fee7e6 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Sun, 10 Nov 2019 09:32:56 +0100 Subject: [PATCH] sanity check during eln load --- src/comp.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/comp.c b/src/comp.c index 80a59faa859..07c35413dde 100644 --- a/src/comp.c +++ b/src/comp.c @@ -3175,15 +3175,22 @@ load_comp_unit (dynlib_handle_ptr handle) { struct thread_state ***current_thread_reloc = dynlib_sym (handle, CURRENT_THREAD_RELOC_SYM); - *current_thread_reloc = ¤t_thread; + EMACS_INT ***pure_reloc = dynlib_sym (handle, PURE_RELOC_SYM); + Lisp_Object *data_relocs = dynlib_sym (handle, DATA_RELOC_SYM); + Lisp_Object (**f_relocs)(void) = dynlib_sym (handle, IMPORTED_FUNC_RELOC_SYM); + void (*top_level_run)(void) = dynlib_sym (handle, "top_level_run"); + + if (!(current_thread_reloc + && pure_reloc + && data_relocs + && f_relocs + && top_level_run)) + return -1; - EMACS_INT ***pure_reloc = - dynlib_sym (handle, PURE_RELOC_SYM); + *current_thread_reloc = ¤t_thread; *pure_reloc = (EMACS_INT **)&pure; /* Imported data. */ - Lisp_Object *data_relocs = dynlib_sym (handle, DATA_RELOC_SYM); - Lisp_Object d_vec = load_static_obj (handle, TEXT_DATA_RELOC_SYM); EMACS_UINT d_vec_len = XFIXNUM (Flength (d_vec)); @@ -3194,8 +3201,6 @@ load_comp_unit (dynlib_handle_ptr handle) } /* Imported functions. */ - Lisp_Object (**f_relocs)(void) = - dynlib_sym (handle, IMPORTED_FUNC_RELOC_SYM); Lisp_Object f_vec = load_static_obj (handle, TEXT_IMPORTED_FUNC_RELOC_SYM); EMACS_UINT f_vec_len = XFIXNUM (Flength (f_vec)); @@ -3251,7 +3256,6 @@ load_comp_unit (dynlib_handle_ptr handle) } /* Executing this will perform all the expected environment modification. */ - void (*top_level_run)(void) = dynlib_sym (handle, "top_level_run"); top_level_run (); return 0; -- 2.39.5