diff --git a/Foundation/FileManager.swift b/Foundation/FileManager.swift
index 7537098..1e4f046 100644
--- a/Foundation/FileManager.swift
+++ b/Foundation/FileManager.swift
@@ -150,7 +150,7 @@
             var isDir: ObjCBool = false
             if !fileExists(atPath: path, isDirectory: &isDir) {
                 let parent = path._nsObject.deletingLastPathComponent
-                if !fileExists(atPath: parent, isDirectory: &isDir) {
+                if !parent.isEmpty && !fileExists(atPath: parent, isDirectory: &isDir) {
                     try createDirectory(atPath: parent, withIntermediateDirectories: true, attributes: attributes)
                 }
                 if mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) != 0 {
diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift
index b536336..d53b42e 100644
--- a/Foundation/NSArray.swift
+++ b/Foundation/NSArray.swift
@@ -653,7 +653,26 @@
     }
 
     open func pathsMatchingExtensions(_ filterTypes: [String]) -> [String] {
-        NSUnimplemented()
+        guard filterTypes.count > 0 else {
+            return []
+        }
+
+        let extensions: [String] = filterTypes.map {
+            var ext = "."
+            ext.append($0)
+            return ext
+        }
+
+        return self.filter {
+            // The force unwrap will abort if the element is not a String but this behaviour matches Dawrin, which throws an exception.
+            let filename = $0 as! String
+            for ext in extensions {
+                if filename.hasSuffix(ext) && filename.count > ext.count {
+                    return true
+                }
+            }
+            return false
+        } as! [String]
     }
 
     override open var _cfTypeID: CFTypeID {
diff --git a/TestFoundation/TestFileManager.swift b/TestFoundation/TestFileManager.swift
index bef3d27..266fb76 100644
--- a/TestFoundation/TestFileManager.swift
+++ b/TestFoundation/TestFileManager.swift
@@ -33,6 +33,7 @@
             ("test_copyItemAtPathToPath", test_copyItemAtPathToPath),
             ("test_homedirectoryForUser", test_homedirectoryForUser),
             ("test_temporaryDirectoryForUser", test_temporaryDirectoryForUser),
+            ("test_creatingDirectoryWithShortIntermediatePath", test_creatingDirectoryWithShortIntermediatePath),
         ]
     }
     
@@ -111,6 +112,20 @@
         }
     }
 
+    func test_creatingDirectoryWithShortIntermediatePath() {
+        let fileManager = FileManager.default
+        fileManager.changeCurrentDirectoryPath(NSTemporaryDirectory())
+
+        let relativePath = NSUUID().uuidString
+
+        do {
+            try fileManager.createDirectory(atPath: relativePath, withIntermediateDirectories: true, attributes: nil)
+            try fileManager.removeItem(atPath: relativePath)
+        } catch {
+            XCTFail("Failed to create and clean up directory")
+        }
+    }
+
     func test_moveFile() {
         let fm = FileManager.default
         let path = NSTemporaryDirectory() + "testfile\(NSUUID().uuidString)"
diff --git a/TestFoundation/TestNSArray.swift b/TestFoundation/TestNSArray.swift
index ce56a1d..69b8eb7 100644
--- a/TestFoundation/TestNSArray.swift
+++ b/TestFoundation/TestNSArray.swift
@@ -51,6 +51,7 @@
             ("test_insertObjectAtIndex", test_insertObjectAtIndex),
             ("test_insertObjectsAtIndexes", test_insertObjectsAtIndexes),
             ("test_replaceObjectsAtIndexesWithObjects", test_replaceObjectsAtIndexesWithObjects),
+            ("test_pathsMatchingExtensions", test_pathsMatchingExtensions),
         ]
     }
     
@@ -746,6 +747,24 @@
         XCTAssertEqual(a3, ["a", "b", "c", "d"])
     }
 
+    func test_pathsMatchingExtensions() {
+        let paths = NSArray(arrayLiteral: "file1.txt", "/tmp/file2.txt", "file3.jpg", "file3.png", "/file4.png", "txt", ".txt")
+        let match1 = paths.pathsMatchingExtensions(["txt"])
+        XCTAssertEqual(match1, ["file1.txt", "/tmp/file2.txt"])
+
+        let match2 = paths.pathsMatchingExtensions([])
+        XCTAssertEqual(match2, [])
+
+        let match3 = paths.pathsMatchingExtensions([".txt", "png"])
+        XCTAssertEqual(match3, ["file3.png", "/file4.png"])
+
+        let match4 = paths.pathsMatchingExtensions(["", ".tx", "tx"])
+        XCTAssertEqual(match4, [])
+
+        let match5 = paths.pathsMatchingExtensions(["..txt"])
+        XCTAssertEqual(match5, [])
+    }
+
     private func createTestFile(_ path: String, _contents: Data) -> String? {
         let tempDir = NSTemporaryDirectory() + "TestFoundation_Playground_" + NSUUID().uuidString + "/"
         do {
