Просмотр исходного кода

VLCMedia: fix URL handling issue with paths containing spaces

(cherry picked from commit d2bcf64b5149f7da35ce00600cc1841468d2f2a3)
Felix Paul Kühne 9 лет назад
Родитель
Сommit
0a4045aacb
1 измененных файлов с 5 добавлено и 4 удалено
  1. 5 4
      Sources/VLCMedia.m

+ 5 - 4
Sources/VLCMedia.m

@@ -220,7 +220,7 @@ static void HandleMediaParsedChanged(const libvlc_event_t * event, void * self)
         VLCLibrary *library = [VLCLibrary sharedLibrary];
         NSAssert(library.instance, @"no library instance when creating media");
 
-        p_md = libvlc_media_new_location(library.instance, [[anURL absoluteString] UTF8String]);
+        p_md = libvlc_media_new_location(library.instance, [[[anURL absoluteString] stringByRemovingPercentEncoding] UTF8String]);
 
         _metaDictionary = [[NSMutableDictionary alloc] initWithCapacity:3];
 
@@ -281,7 +281,7 @@ static void HandleMediaParsedChanged(const libvlc_event_t * event, void * self)
 - (NSString *)description
 {
     NSString * result = _metaDictionary[VLCMetaInformationTitle];
-    return [NSString stringWithFormat:@"<%@ %p> %@", [self class], self, (result ? result : [_url absoluteString])];
+    return [NSString stringWithFormat:@"<%@ %p> %@", [self class], self, (result ? result : [[_url absoluteString] stringByRemovingPercentEncoding])];
 }
 
 - (NSComparisonResult)compare:(VLCMedia *)media
@@ -814,9 +814,10 @@ NSString *const VLCMediaTracksInformationTextEncoding = @"encoding"; // NSString
     if (!p_url)
         return;
 
-    _url = [NSURL URLWithString:@(p_url)];
-    if (!_url) /* Attempt to interpret as a file path then */
+    _url = [NSURL URLWithString:[[NSString stringWithUTF8String:p_url] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
+    if (!_url) /* Attempt to interpret as a file path then */ {
         _url = [NSURL fileURLWithPath:@(p_url)];
+    }
     free(p_url);
 
     libvlc_media_set_user_data(p_md, (__bridge void*)self);