aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--regress/104-interposition-discarded.lua12
-rw-r--r--src/openssl.c3
2 files changed, 15 insertions, 0 deletions
diff --git a/regress/104-interposition-discarded.lua b/regress/104-interposition-discarded.lua
new file mode 100644
index 0000000..4261bcb
--- /dev/null
+++ b/regress/104-interposition-discarded.lua
@@ -0,0 +1,12 @@
+#!/usr/bin/env lua
+
+require"regress".export".*"
+
+local ssl_context = require "openssl.ssl.context"
+
+local value = {}
+ssl_context.interpose("foo", value)
+check(ssl_context.new().foo == value, "interpose failed")
+
+require "openssl.ssl" -- Pick a module that doesn't get loaded by regress.lua
+check(ssl_context.new().foo == value, "loading a module reset methods")
diff --git a/src/openssl.c b/src/openssl.c
index 5507762..f0d2a38 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -1191,6 +1191,9 @@ static _Bool auxL_newclass(lua_State *L, const char *name, const auxL_Reg *metho
_Bool fresh = auxL_newmetatable(L, name, reset);
int n;
+ if (!reset && !fresh)
+ return fresh;
+
auxL_setfuncs(L, metamethods, 0);
if ((n = auxL_liblen(methods))) {