Răsfoiți Sursa

core: check return of dlsym() before dlerror() handling

- cope with the case when dlerror is not reset by dlsym
- related to GH #1465

(cherry picked from commit 045d44762ce7cd267e64849c1c138d45b1fa040f)
(cherry picked from commit 289eb37432bfc61855234893daa6be27d40f8788)
Daniel-Constantin Mierla 7 ani în urmă
părinte
comite
794292b1d2
1 a modificat fișierele cu 7 adăugiri și 4 ștergeri
  1. 7 4
      src/core/sr_module.c

+ 7 - 4
src/core/sr_module.c

@@ -630,11 +630,14 @@ reload:
 		if(expref.len>3 && strcmp(expref.s+expref.len-3, ".so")==0)
 			expref.len -= 3;
 		snprintf(exbuf, 62, "_%.*s_exports", expref.len, expref.s);
-		exp = (union module_exports_u*)dlsym(handle, exbuf);
 		LM_DBG("looking up exports with name: %s\n", exbuf);
-		if ( (error =(char*)dlerror())!=0 ){
-			LM_ERR("%s\n", error);
-			goto error1;
+		exp = (union module_exports_u*)dlsym(handle, exbuf);
+		if(exp==NULL) {
+			if ( (error =(char*)dlerror())!=0 ){
+				LM_ERR("failure for exports symbol: %s - dlerror: %s\n",
+						exbuf, error);
+				goto error1;
+			}
 		}
 	}
 	/* hack to allow for kamailio style dlflags inside exports */