[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor-browser/tor-browser-60.0.1esr-8.0-1] Bug 1389967 In MinGW, work around a pointer to a function thunk disappearing when we unload nssckbi r?franziskus, dmajor



commit cb8da44a0ae2de7ec5bd8bf5e66579f46e6902cc
Author: Tom Ritter <tom@xxxxxxxxxxx>
Date:   Fri Jun 8 13:12:11 2018 -0500

    Bug 1389967 In MinGW, work around a pointer to a function thunk disappearing when we unload nssckbi r?franziskus,dmajor
---
 security/nss/lib/base/error.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/security/nss/lib/base/error.c b/security/nss/lib/base/error.c
index 95a76cf79968..2596a5c09321 100644
--- a/security/nss/lib/base/error.c
+++ b/security/nss/lib/base/error.c
@@ -15,6 +15,10 @@
 #include <limits.h> /* for UINT_MAX */
 #include <string.h> /* for memmove */
 
+#if defined(__MINGW32__)
+#include <windows.h>
+#endif
+
 #define NSS_MAX_ERROR_STACK_COUNT 16 /* error codes */
 
 /*
@@ -65,7 +69,26 @@ static const PRCallOnceType error_call_again;
 static PRStatus
 error_once_function(void)
 {
+
+/*
+ * This #ifdef function is redundant. It performs the same thing as the
+ * else case.
+ *
+ * However, the MinGW version looks up the function from nss3's export
+ * table, and on MinGW _that_ behaves differently than passing a
+ * function pointer in a different module because MinGW has
+ * -mnop-fun-dllimport specified, which generates function thunks for
+ * cross-module calls. And when a module (like nssckbi) gets unloaded,
+ * and you try to call into that thunk (which is now missing) you'll
+ * crash. So we do this bit of ugly to avoid that crash. Fortunately
+ * this is the only place we've had to do this.
+ */
+#if defined(__MINGW32__)
+    HMODULE nss3 = GetModuleHandleW(L"nss3");
+    return PR_NewThreadPrivateIndex(&error_stack_index, GetProcAddress(nss3, "PR_Free"));
+#else
     return PR_NewThreadPrivateIndex(&error_stack_index, PR_Free);
+#endif
 }
 
 /*



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits