Commit b6845258 authored by Michael Lee's avatar Michael Lee Committed by Facebook Github Bot

Delete conversion from Objective-C block to folly::Function

Summary: Objective-C blocks are stack allocated, and unless there is a proper assignment it isn't retained and the memory is freed. Because folly::Function used to move, it would hold a reference, but after switch to a constructor by-value, it no longer does this and we see a use-after-free.

Reviewed By: yfeldblum, ericniebler

Differential Revision: D5888606

fbshipit-source-id: fe4cabb2f2ae289cce0e7429e0af3935ba314720
parent 4af3040b
...@@ -491,6 +491,12 @@ class Function final : private detail::function::FunctionTraits<FunctionType> { ...@@ -491,6 +491,12 @@ class Function final : private detail::function::FunctionTraits<FunctionType> {
// not copyable // not copyable
Function(const Function&) = delete; Function(const Function&) = delete;
#if __OBJC__
// Delete conversion from Objective-C blocks
template <class ReturnType, class... Args>
Function(ReturnType (^)(Args...)) = delete;
#endif
/** /**
* Move constructor * Move constructor
*/ */
...@@ -570,6 +576,12 @@ class Function final : private detail::function::FunctionTraits<FunctionType> { ...@@ -570,6 +576,12 @@ class Function final : private detail::function::FunctionTraits<FunctionType> {
Function& operator=(const Function&) = delete; Function& operator=(const Function&) = delete;
#if __OBJC__
// Delete conversion from Objective-C blocks
template <class ReturnType, class... Args>
Function& operator=(ReturnType (^)(Args...)) = delete;
#endif
/** /**
* Move assignment operator * Move assignment operator
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment