]> git.eshelyaron.com Git - emacs.git/commitdiff
sanity check during eln load
authorAndrea Corallo <akrl@sdf.org>
Sun, 10 Nov 2019 08:32:56 +0000 (09:32 +0100)
committerAndrea Corallo <akrl@sdf.org>
Wed, 1 Jan 2020 10:38:02 +0000 (11:38 +0100)
src/comp.c

index 80a59faa859ebfc5064ee2f874b1bbb9bdc73419..07c35413dde707786080366b81dad629f3bb8ad7 100644 (file)
@@ -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 = &current_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 = &current_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;