From 7686fe8b883998dca6eaded0ebf20d04f8d69025 Mon Sep 17 00:00:00 2001 From: Francisco Requena Date: Sun, 2 Feb 2020 15:18:52 +0100 Subject: [PATCH 1/2] Fix mvim:// not handling paths with spaces The file URI was being url decoded and then fed to NSURL. A decoded URI doesn't conform to RFC 2396. NSURL wasn't happy with it. We avoid decoding the url. The rest of queries (both fields and values) are still decoded. --- src/MacVim/MMAppController.m | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/MacVim/MMAppController.m b/src/MacVim/MMAppController.m index a75dbde0ee..a183df5022 100644 --- a/src/MacVim/MMAppController.m +++ b/src/MacVim/MMAppController.m @@ -1744,19 +1744,30 @@ - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event NSEnumerator *enumerator = [queries objectEnumerator]; NSString *param; while ((param = [enumerator nextObject])) { + // query: = NSArray *arr = [param componentsSeparatedByString:@"="]; if ([arr count] == 2) { + // parse field + NSString *f = [arr objectAtIndex:0]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11 - [dict setValue:[[arr lastObject] stringByRemovingPercentEncoding] - forKey:[[arr objectAtIndex:0] stringByRemovingPercentEncoding]]; + f = [f stringByRemovingPercentEncoding]; #else - [dict setValue:[[arr lastObject] - stringByReplacingPercentEscapesUsingEncoding: - NSUTF8StringEncoding] - forKey:[[arr objectAtIndex:0] - stringByReplacingPercentEscapesUsingEncoding: - NSUTF8StringEncoding]]; + f = [f stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; #endif + + // parse value + NSString *v = [arr objectAtIndex:1]; + + // do not decode url, since it's a file URI + BOOL decode = ![f isEqualToString:@"url"]; + if (decode) + { +#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11 + v = [f stringByRemovingPercentEncoding]; +#else + v = [f stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +#endif + } } } From 5f7e769b715a00a36cf168954335af8aa7a5698a Mon Sep 17 00:00:00 2001 From: Francisco Requena Date: Sun, 1 Mar 2020 20:42:58 +0100 Subject: [PATCH 2/2] Add missing sentence --- src/MacVim/MMAppController.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/MacVim/MMAppController.m b/src/MacVim/MMAppController.m index a183df5022..a5fc6db61f 100644 --- a/src/MacVim/MMAppController.m +++ b/src/MacVim/MMAppController.m @@ -1768,6 +1768,8 @@ - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event v = [f stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; #endif } + + [dict setValue:v forKey:f]; } }