From 7686fe8b883998dca6eaded0ebf20d04f8d69025 Mon Sep 17 00:00:00 2001 From: Francisco Requena Date: Sun, 2 Feb 2020 15:18:52 +0100 Subject: [PATCH] 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 @@ fsEventCallback(ConstFSEventStreamRef streamRef, 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 + } } }