diff --git a/Source/GSServicesManager.m b/Source/GSServicesManager.m index 7968e03e1..ccceb3e53 100644 --- a/Source/GSServicesManager.m +++ b/Source/GSServicesManager.m @@ -277,7 +277,9 @@ NSRegisterServicesProvider(id provider, NSString *name) /** * Selectively forwards those messages which are thought to be safe, * and perform any special operations we need for workspace management - * etc. + * etc.
+ * The logic in this method must match that in + * methodSignatureForSelector: */ - (void) forwardInvocation: (NSInvocation*)anInvocation { @@ -293,7 +295,7 @@ NSRegisterServicesProvider(id provider, NSString *name) if ([selName hasPrefix: @"_"] == YES) { [NSException raise: NSGenericException - format: @"method name '%@' private in '%@'", + format: @"method name '%@' private in '%@'", selName, [manager port]]; } @@ -403,54 +405,51 @@ NSRegisterServicesProvider(id provider, NSString *name) * to see if it's a standard service message or standard application * message.
* If the message is non-standard, it can be checked against a list - * of messages specified by the GSPermittedMessages user default. + * of messages specified by the GSPermittedMessages user default.
+ * The logic in this method must match that in + * forwardInvocation: */ - (NSMethodSignature*) methodSignatureForSelector: (SEL)aSelector { NSMethodSignature *sig = nil; NSString *selName = NSStringFromSelector(aSelector); + id delegate; - if ([selName isEqualToString: @"terminate:"]) + if ([selName hasSuffix: @":userData:error:"]) { - sig = [NSApp methodSignatureForSelector: aSelector]; + return [servicesProvider methodSignatureForSelector: aSelector]; } - else if ([selName hasSuffix: @":userData:error:"]) - { - sig = [servicesProvider methodSignatureForSelector: aSelector]; - } - else - { - id delegate = [[NSApplication sharedApplication] delegate]; - if ([selName hasPrefix: @"application:"] == YES) + delegate = [[NSApplication sharedApplication] delegate]; + if ([selName hasPrefix: @"application:"] == YES) + { + if ([delegate respondsToSelector: aSelector] == YES) { - if ([delegate respondsToSelector: aSelector] == YES) - { - sig = [delegate methodSignatureForSelector: aSelector]; - } - else - { - sig = [manager methodSignatureForSelector: aSelector]; - } + sig = [delegate methodSignatureForSelector: aSelector]; } - else + else if ([manager respondsToSelector: aSelector] == YES) { - NSArray *messages; + sig = [manager methodSignatureForSelector: aSelector]; + } + } - messages = [[NSUserDefaults standardUserDefaults] arrayForKey: - @"GSPermittedMessages"]; + if (sig == nil) + { + NSArray *messages; - if (messages != nil) - { - if ([messages containsObject: selName] == YES) - { - sig = [delegate methodSignatureForSelector: aSelector]; - } - } - else - { - sig = [delegate methodSignatureForSelector: aSelector]; - } + messages = [[NSUserDefaults standardUserDefaults] arrayForKey: + @"GSPermittedMessages"]; + if (messages != nil && [messages containsObject: selName] == NO) + { + return nil; + } + if ([delegate respondsToSelector: aSelector] == YES) + { + sig = [delegate methodSignatureForSelector: aSelector]; + } + else if ([NSApp respondsToSelector: aSelector] == YES) + { + sig = [NSApp methodSignatureForSelector: aSelector]; } } return sig;