fix a memleak (#967)

* fix a memleak

* black
diff --git a/src/OpenSSL/crypto.py b/src/OpenSSL/crypto.py
index 84f92b1..4265525 100644
--- a/src/OpenSSL/crypto.py
+++ b/src/OpenSSL/crypto.py
@@ -1017,9 +1017,20 @@
         """
         exts = []
         native_exts_obj = _lib.X509_REQ_get_extensions(self._req)
+        native_exts_obj = _ffi.gc(
+            native_exts_obj,
+            lambda x: _lib.sk_X509_EXTENSION_pop_free(
+                x,
+                _ffi.addressof(_lib._original_lib, "X509_EXTENSION_free"),
+            ),
+        )
+
         for i in range(_lib.sk_X509_EXTENSION_num(native_exts_obj)):
             ext = X509Extension.__new__(X509Extension)
-            ext._extension = _lib.sk_X509_EXTENSION_value(native_exts_obj, i)
+            extension = _lib.X509_EXTENSION_dup(
+                _lib.sk_X509_EXTENSION_value(native_exts_obj, i)
+            )
+            ext._extension = _ffi.gc(extension, _lib.X509_EXTENSION_free)
             exts.append(ext)
         return exts
 
diff --git a/tests/test_crypto.py b/tests/test_crypto.py
index 62b1690..265d31e 100644
--- a/tests/test_crypto.py
+++ b/tests/test_crypto.py
@@ -1625,6 +1625,9 @@
         assert exts[1].get_short_name() == b"keyUsage"
         assert exts[1].get_critical() == 0
         assert exts[1].get_data() == b"\x03\x02\x07\x80"
+        # Requesting it a second time should return the same list
+        exts = request.get_extensions()
+        assert len(exts) == 2
 
     def test_add_extensions_wrong_args(self):
         """