Skip to content

Commit f0a4ff2

Browse files
fix(security): replace 3 generic catches in HttpOutputConnector.cs
- InitializeAsync: added UriFormatException, ArgumentException, InvalidOperationException handlers - SendMessageAsync: added JsonException, InvalidOperationException handlers - CloseAsync: added ObjectDisposedException, InvalidOperationException handlers Refs: E7-T1 (36/39 catches fixed)
1 parent 5692e8e commit f0a4ff2

File tree

1 file changed

+64
-2
lines changed

1 file changed

+64
-2
lines changed

src/Node.Runtime/Connectors/HttpOutputConnector.cs

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Diagnostics;
77
using System.Net;
88
using System.Text;
9+
using System.Text.Json;
910

1011
namespace Node.Runtime.Connectors;
1112

@@ -98,9 +99,27 @@ public async Task InitializeAsync(CancellationToken cancellationToken = default)
9899
activity?.SetTag("base.url", _options.BaseUrl);
99100
activity?.SetTag("max.retries", _options.MaxRetryAttempts);
100101
}
102+
catch (UriFormatException ex)
103+
{
104+
_logger.LogError(ex, "Invalid base URL format: {BaseUrl}", _options.BaseUrl);
105+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
106+
throw;
107+
}
108+
catch (ArgumentException ex)
109+
{
110+
_logger.LogError(ex, "Invalid HTTP configuration: {Message}", ex.Message);
111+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
112+
throw;
113+
}
114+
catch (InvalidOperationException ex)
115+
{
116+
_logger.LogError(ex, "Invalid operation during HTTP connector initialization: {Message}", ex.Message);
117+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
118+
throw;
119+
}
101120
catch (Exception ex)
102121
{
103-
_logger.LogError(ex, "Failed to initialize HTTP output connector");
122+
_logger.LogError(ex, "Unexpected error initializing HTTP output connector");
104123
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
105124
throw;
106125
}
@@ -194,6 +213,38 @@ public async Task<SendMessageResult> SendMessageAsync(
194213
IsRetryable = true
195214
};
196215
}
216+
catch (JsonException ex)
217+
{
218+
_logger.LogError(
219+
ex,
220+
"JSON serialization error while sending message: MessageId={MessageId}",
221+
message.MessageId);
222+
223+
activity?.SetStatus(ActivityStatusCode.Error, "Serialization error");
224+
225+
return new SendMessageResult
226+
{
227+
Success = false,
228+
ErrorMessage = $"JSON error: {ex.Message}",
229+
IsRetryable = false
230+
};
231+
}
232+
catch (InvalidOperationException ex)
233+
{
234+
_logger.LogError(
235+
ex,
236+
"Invalid operation while sending message: MessageId={MessageId}",
237+
message.MessageId);
238+
239+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
240+
241+
return new SendMessageResult
242+
{
243+
Success = false,
244+
ErrorMessage = ex.Message,
245+
IsRetryable = false
246+
};
247+
}
197248
catch (Exception ex)
198249
{
199250
_logger.LogError(
@@ -235,9 +286,20 @@ public async Task CloseAsync(CancellationToken cancellationToken = default)
235286

236287
_logger.LogInformation("HTTP output connector closed successfully");
237288
}
289+
catch (ObjectDisposedException ex)
290+
{
291+
_logger.LogWarning(ex, "HTTP client already disposed during close");
292+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
293+
}
294+
catch (InvalidOperationException ex)
295+
{
296+
_logger.LogError(ex, "Invalid operation while closing HTTP output connector");
297+
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
298+
throw;
299+
}
238300
catch (Exception ex)
239301
{
240-
_logger.LogError(ex, "Error closing HTTP output connector");
302+
_logger.LogError(ex, "Unexpected error closing HTTP output connector");
241303
activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
242304
throw;
243305
}

0 commit comments

Comments
 (0)