bindings: close after reading module struct
authorFedor Indutny <fedor@indutny.com>
Thu, 10 Sep 2015 11:01:20 +0000 (04:01 -0700)
committerRod Vagg <rod@vagg.org>
Fri, 11 Sep 2015 01:31:20 +0000 (11:31 +1000)
Do not let the module struct to be deallocated by `uv_dlclose`
before reading data from it.

PR-URL: https://github.com/nodejs/node/pull/2792
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: Yosuke Furukawa <yosuke.furukawa@gmail.com>
src/node.cc

index 74274f7..d48fd2a 100644 (file)
@@ -2087,12 +2087,15 @@ void DLOpen(const FunctionCallbackInfo<Value>& args) {
     return;
   }
   if (mp->nm_version != NODE_MODULE_VERSION) {
-    uv_dlclose(&lib);
     char errmsg[1024];
     snprintf(errmsg,
              sizeof(errmsg),
              "Module version mismatch. Expected %d, got %d.",
              NODE_MODULE_VERSION, mp->nm_version);
+
+    // NOTE: `mp` is allocated inside of the shared library's memory, calling
+    // `uv_dlclose` will deallocate it
+    uv_dlclose(&lib);
     env->ThrowError(errmsg);
     return;
   }