From 760333520c248493a25e37bff730bc8ce1a21ed8 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 6 Aug 2021 14:35:14 +0800 Subject: [PATCH 1/3] Adjust JsonRPCPlugin.cs Exception Handling --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 70 ++++++---------------- 1 file changed, 18 insertions(+), 52 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 22f547a5a..d8dc2f420 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -40,15 +40,7 @@ namespace Flow.Launcher.Core.Plugin public List LoadContextMenus(Result selectedResult) { var output = ExecuteContextMenu(selectedResult); - try - { - return DeserializedResult(output); - } - catch (Exception e) - { - Log.Exception($"|JsonRPCPlugin.LoadContextMenus|Exception on result <{selectedResult}>", e); - return null; - } + return DeserializedResult(output); } private static readonly JsonSerializerOptions options = new() @@ -65,23 +57,10 @@ namespace Flow.Launcher.Core.Plugin { if (output == Stream.Null) return null; - try - { - var queryResponseModel = - await JsonSerializer.DeserializeAsync(output, options); + var queryResponseModel = + await JsonSerializer.DeserializeAsync(output, options); - return ParseResults(queryResponseModel); - } - catch (JsonException e) - { - Log.Exception(GetType().FullName, "Unexpected Json Input", e); - } - finally - { - await output.DisposeAsync(); - } - - return null; + return ParseResults(queryResponseModel); } private List DeserializedResult(string output) @@ -249,12 +228,14 @@ namespace Flow.Launcher.Core.Plugin await using var source = process.StandardOutput.BaseStream; var buffer = BufferManager.GetStream(); - + token.Register(() => { // ReSharper disable once AccessToModifiedClosure // Manually Check whether disposed + // ReSharper disable once AccessToDisposedClosure if (!disposed && !process.HasExited) + // ReSharper disable once AccessToDisposedClosure process.Kill(); }); @@ -274,6 +255,14 @@ namespace Flow.Launcher.Core.Plugin token.ThrowIfCancellationRequested(); + if (buffer.Length == 0) + { + var errorMessage = process.StandardError.EndOfStream ? + "Empty JSONRPC Response" : + await process.StandardError.ReadToEndAsync(); + throw new InvalidDataException($"{context.CurrentPluginMetadata.Name}|{errorMessage}"); + } + if (!process.StandardError.EndOfStream) { using var standardError = process.StandardError; @@ -281,23 +270,12 @@ namespace Flow.Launcher.Core.Plugin if (!string.IsNullOrEmpty(error)) { - Log.Error($"|JsonRPCPlugin.ExecuteAsync|{error}"); - return Stream.Null; + Log.Error($"|{context.CurrentPluginMetadata.Name}.{nameof(ExecuteAsync)}|{error}"); } - - Log.Error("|JsonRPCPlugin.ExecuteAsync|Empty standard output and standard error."); - return Stream.Null; } return buffer; } - catch (Exception e) - { - Log.Exception( - $"|JsonRPCPlugin.ExecuteAsync|Exception for filename <{startInfo.FileName}> with argument <{startInfo.Arguments}>", - e); - return Stream.Null; - } finally { process?.Dispose(); @@ -307,20 +285,8 @@ namespace Flow.Launcher.Core.Plugin public async Task> QueryAsync(Query query, CancellationToken token) { - try - { - var output = await ExecuteQueryAsync(query, token); - return await DeserializedResultAsync(output); - } - catch (OperationCanceledException) - { - return null; - } - catch (Exception e) - { - Log.Exception($"|JsonRPCPlugin.Query|Exception when query <{query}>", e); - return null; - } + var output = await ExecuteQueryAsync(query, token); + return await DeserializedResultAsync(output); } public virtual Task InitAsync(PluginInitContext context) From 235fe4aacbebb9aa3f1a11e60364f99e415909b6 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sat, 7 Aug 2021 13:26:11 +1000 Subject: [PATCH 2/3] remove extra comments --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index d8dc2f420..ae15d23a8 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -233,7 +233,6 @@ namespace Flow.Launcher.Core.Plugin { // ReSharper disable once AccessToModifiedClosure // Manually Check whether disposed - // ReSharper disable once AccessToDisposedClosure if (!disposed && !process.HasExited) // ReSharper disable once AccessToDisposedClosure process.Kill(); @@ -295,4 +294,4 @@ namespace Flow.Launcher.Core.Plugin return Task.CompletedTask; } } -} \ No newline at end of file +} From 77784492391221dc5544d72ba4fcb596c25c7ea5 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Sat, 7 Aug 2021 13:26:38 +1000 Subject: [PATCH 3/3] remove extra comments --- Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index ae15d23a8..0df853a5d 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -234,7 +234,6 @@ namespace Flow.Launcher.Core.Plugin // ReSharper disable once AccessToModifiedClosure // Manually Check whether disposed if (!disposed && !process.HasExited) - // ReSharper disable once AccessToDisposedClosure process.Kill(); });