Temporarily restore sk_pop_free_ex

This is a temporary workaround for b/291994116

Bug: b:291994116
Change-Id: I5b0372e07cf3bdf4b6a5b4b37dabea828ad026a8
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/61885
Auto-Submit: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c
index 0bb5041..a326eb7 100644
--- a/crypto/stack/stack.c
+++ b/crypto/stack/stack.c
@@ -532,3 +532,8 @@
 size_t sk_push(OPENSSL_STACK *sk, void *p) { return OPENSSL_sk_push(sk, p); }
 
 void *sk_pop(OPENSSL_STACK *sk) { return OPENSSL_sk_pop(sk); }
+
+void sk_pop_free_ex(OPENSSL_STACK *sk, OPENSSL_sk_call_free_func call_free_func,
+                    OPENSSL_sk_free_func free_func) {
+  OPENSSL_sk_pop_free_ex(sk, call_free_func, free_func);
+}
diff --git a/include/openssl/stack.h b/include/openssl/stack.h
index 812bccf..100b1db 100644
--- a/include/openssl/stack.h
+++ b/include/openssl/stack.h
@@ -344,9 +344,16 @@
 OPENSSL_EXPORT size_t sk_push(OPENSSL_STACK *sk, void *p);
 OPENSSL_EXPORT void *sk_pop(OPENSSL_STACK *sk);
 
-// sk_pop_free behaves like |sk_pop_free_ex| but performs an invalid function
-// pointer cast. It exists because some existing callers called |sk_pop_free|
-// directly.
+// sk_pop_free_ex calls |OPENSSL_sk_pop_free_ex|.
+//
+// TODO(b/291994116): Remove this.
+OPENSSL_EXPORT void sk_pop_free_ex(OPENSSL_STACK *sk,
+                                   OPENSSL_sk_call_free_func call_free_func,
+                                   OPENSSL_sk_free_func free_func);
+
+// sk_pop_free behaves like |OPENSSL_sk_pop_free_ex| but performs an invalid
+// function pointer cast. It exists because some existing callers called
+// |sk_pop_free| directly.
 //
 // TODO(davidben): Migrate callers to bssl::UniquePtr and remove this.
 OPENSSL_EXPORT void sk_pop_free(OPENSSL_STACK *sk,