From 99a58c7e1d6ad66c61c78b22b5ce6260151eb2a1 Mon Sep 17 00:00:00 2001 From: Jonathan Porter Date: Mon, 8 Sep 2025 14:41:32 -0700 Subject: [PATCH 1/4] Fix URL processing in InternalLoad method Updated URL prefix checks to include colons for "http:" and "https:". Improved handling of file URLs by adding a check for the "file:" prefix to extract the local path. Adjusted format extraction logic to work with the new file name variable. --- .../Reader/OpenApiModelFactory.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index 0b0fee38b..edc0c78f7 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -302,8 +302,8 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp Stream stream; string? format; - if (url.StartsWith("http", StringComparison.OrdinalIgnoreCase) - || url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) + if (url.StartsWith("http:", StringComparison.OrdinalIgnoreCase) + || url.StartsWith("https:", StringComparison.OrdinalIgnoreCase)) { var response = await settings.HttpClient.GetAsync(url, token).ConfigureAwait(false); var mediaType = response.Content.Headers.ContentType?.MediaType; @@ -320,11 +320,21 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp } else { - format = Path.GetExtension(url).Split('.').LastOrDefault(); - try { - var fileInput = new FileInfo(url); + string fileName; + if (url.StartsWith("file:", StringComparison.OrdinalIgnoreCase)) + { + fileName = new Uri(url).LocalPath; + } + else + { + fileName = url; + } + + format = Path.GetExtension(fileName).Split('.').LastOrDefault(); + + var fileInput = new FileInfo(fileName); stream = fileInput.OpenRead(); } catch (Exception ex) when ( From 287abcc23a273af67a125a3a2c3e52f5d68b59b5 Mon Sep 17 00:00:00 2001 From: Jonathan Porter Date: Fri, 19 Sep 2025 09:33:59 -0400 Subject: [PATCH 2/4] Removed format detection by file extension per feedback. --- src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index edc0c78f7..4aae3fd19 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -332,7 +332,7 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp fileName = url; } - format = Path.GetExtension(fileName).Split('.').LastOrDefault(); + format = null; var fileInput = new FileInfo(fileName); stream = fileInput.OpenRead(); From 1e8a819795ff8125f446d773269134fa1f6cb33c Mon Sep 17 00:00:00 2001 From: Jonathan Porter Date: Fri, 19 Sep 2025 10:36:42 -0400 Subject: [PATCH 3/4] Revert "Removed format detection by file extension per feedback." This reverts commit 287abcc23a273af67a125a3a2c3e52f5d68b59b5. --- src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index 4aae3fd19..edc0c78f7 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -332,7 +332,7 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp fileName = url; } - format = null; + format = Path.GetExtension(fileName).Split('.').LastOrDefault(); var fileInput = new FileInfo(fileName); stream = fileInput.OpenRead(); From 33b3c9e70d9a12af8cabb54a663534fc919229be Mon Sep 17 00:00:00 2001 From: Jonathan Porter Date: Fri, 19 Sep 2025 10:45:29 -0400 Subject: [PATCH 4/4] Add exception capture for URI construction so InvalidOperationException is thrown instead. --- src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs index edc0c78f7..6f02d9426 100644 --- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs +++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs @@ -339,6 +339,8 @@ private static ReadResult InternalLoad(MemoryStream input, string format, OpenAp } catch (Exception ex) when ( ex is + UriFormatException or + FormatException or FileNotFoundException or PathTooLongException or DirectoryNotFoundException or