1--- nspr/pr/src/linking/prlink.c
2+++ nspr/pr/src/linking/prlink.c
3@@ -799,7 +799,7 @@
4          * The reason is that DARWIN's dlopen ignores the provided path
5          * and checks for the plain filename in DYLD_LIBRARY_PATH,
6          * which could load an unexpected version of a library. */
7-        if (strchr(name, PR_DIRECTORY_SEPARATOR) == NULL) {
8+        if (strchr(name, PR_DIRECTORY_SEPARATOR) == NULL || strncmp(name, "@loader_path/", 13) == 0) {
9           /* no slash, allow to load from any location */
10           okToLoad = PR_TRUE;
11         } else {
12--- nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpcertstore.c
13+++ nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpcertstore.c
14@@ -224,7 +224,11 @@
15 static PRStatus PR_CALLBACK pkix_getDecodeFunction(void)
16 {
17     pkix_decodeFunc.smimeLib =
18+#if defined DARWIN
19+		PR_LoadLibrary("@loader_path/" SHLIB_PREFIX"smime3."SHLIB_SUFFIX);
20+#else
21 		PR_LoadLibrary(SHLIB_PREFIX"smime3."SHLIB_SUFFIX);
22+#endif
23     if (pkix_decodeFunc.smimeLib == NULL) {
24 	return PR_FAILURE;
25     }
26