Fix a dangerous usage of error pointer

`error` **isn't** a `NSError*` with `__block` storage.
`error` **is** a pointer to an `NSError __autoreleasing*` with automatic storage.

So capturing `error` in a block does capture a pointer to an object with automatic storage duration (on the stack). As the block will be executed asynchronously, dereferencing `error` would refer to an object outside of its lifetime, which is undefined behavior.