[vlc-commits] modules: fix pointer aliasing

Rémi Denis-Courmont git at videolan.org
Sun Oct 27 19:24:04 CET 2019


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Oct 27 20:13:28 2019 +0200| [67488437b4c6c6ac2d13e5d923cd3de90946add0] | committer: Rémi Denis-Courmont

modules: fix pointer aliasing

Tree functions return pointers to void pointers.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=67488437b4c6c6ac2d13e5d923cd3de90946add0
---

 src/modules/bank.c  |  4 ++--
 src/modules/entry.c | 15 +++++++++------
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/modules/bank.c b/src/modules/bank.c
index 2f85b0776c..275680456b 100644
--- a/src/modules/bank.c
+++ b/src/modules/bank.c
@@ -118,7 +118,7 @@ static int vlc_module_store(module_t *mod)
     if (unlikely(cap->name == NULL))
         goto error;
 
-    vlc_modcap_t **cp = tsearch(cap, &modules.caps_tree, vlc_modcap_cmp);
+    void **cp = tsearch(cap, &modules.caps_tree, vlc_modcap_cmp);
     if (unlikely(cp == NULL))
         goto error;
 
@@ -787,7 +787,7 @@ module_t **module_list_get (size_t *n)
  */
 ssize_t module_list_cap (module_t ***restrict list, const char *name)
 {
-    const vlc_modcap_t **cp = tfind(&name, &modules.caps_tree, vlc_modcap_cmp);
+    const void **cp = tfind(&name, &modules.caps_tree, vlc_modcap_cmp);
     if (cp == NULL)
     {
         *list = NULL;
diff --git a/src/modules/entry.c b/src/modules/entry.c
index c3e64af3d3..70f9a8c932 100644
--- a/src/modules/entry.c
+++ b/src/modules/entry.c
@@ -512,8 +512,7 @@ static int vlc_plugin_gpa_cb(void *ctx, void *tgt, int propid, ...)
     sym->name = name;
     sym->addr = addr;
 
-    struct vlc_plugin_symbol **symp = tsearch(sym, rootp,
-                                              vlc_plugin_symbol_compare);
+    void **symp = tsearch(sym, rootp, vlc_plugin_symbol_compare);
     if (unlikely(symp == NULL))
     {   /* Memory error */
         free(sym);
@@ -522,7 +521,10 @@ static int vlc_plugin_gpa_cb(void *ctx, void *tgt, int propid, ...)
 
     if (*symp != sym)
     {   /* Duplicate symbol */
-        assert((*symp)->addr == sym->addr);
+#ifndef NDEBUG
+        const struct vlc_plugin_symbol *oldsym = *symp;
+        assert(oldsym->addr == sym->addr);
+#endif
         free(sym);
     }
     return 0;
@@ -565,13 +567,14 @@ static int vlc_plugin_get_symbol(void *root, const char *name,
         return 0;
     }
 
-    const struct vlc_plugin_symbol **symp = tfind(&name, &root,
-                                                  vlc_plugin_symbol_compare);
+    const void **symp = tfind(&name, &root, vlc_plugin_symbol_compare);
 
     if (symp == NULL)
         return -1;
 
-    *addrp = (*symp)->addr;
+    const struct vlc_plugin_symbol *sym = *symp;
+
+    *addrp = sym->addr;
     return 0;
 }
 



More information about the vlc-commits mailing list