From b2ae62a4dbb4245cdcb8032ab4ae0ec882138cf0 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Wed, 22 Dec 2021 00:13:27 -0800 Subject: [PATCH] URL open panel: Fix invocation of completion handler so it doesn't crash --- ThirdParty/OpenURLPanel/OpenURLPanel.m | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ThirdParty/OpenURLPanel/OpenURLPanel.m b/ThirdParty/OpenURLPanel/OpenURLPanel.m index f425ab390..16e27654f 100755 --- a/ThirdParty/OpenURLPanel/OpenURLPanel.m +++ b/ThirdParty/OpenURLPanel/OpenURLPanel.m @@ -166,7 +166,6 @@ typedef id (*myIMP)(id, SEL, ...); NSString *urlString; NSURL *url; BOOL informDelegate = YES; - myIMP callback; if ([sender tag] == NSModalResponseOK) { @@ -218,8 +217,18 @@ typedef id (*myIMP)(id, SEL, ...); // inform the delegate if (informDelegate && mDelegate && mDidEndSelector) { - callback = (myIMP) [mDelegate methodForSelector:mDidEndSelector]; - callback(mDelegate, mDidEndSelector, self, [sender tag], mContextInfo); + NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[mDelegate methodSignatureForSelector:mDidEndSelector]]; + [inv setSelector:mDidEndSelector]; + [inv setTarget:mDelegate]; + + OpenURLPanel *pself = self; + int tag = (int)([sender tag]); + + [inv setArgument:&(pself) atIndex:2]; + [inv setArgument:&(tag) atIndex:3]; + [inv setArgument:&(mContextInfo) atIndex:4]; + + [inv invoke]; [self close]; }