Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion tracer/src/Datadog.Trace/Agent/IApiResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using System.Text;
using System.Threading.Tasks;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Util.Streams;
using Datadog.Trace.Vendors.Newtonsoft.Json;

Expand Down Expand Up @@ -66,7 +67,7 @@ public static async Task<string> ReadAsStringAsync(this IApiResponse apiResponse
bufferedStream = new InitiallyBufferedStream(responseStream);
// wrap the stream in an "initially buffering" stream, so that if deserialization fails completely, we can get some details
using var sr = GetStreamReader(apiResponse, bufferedStream);
using var jsonTextReader = new JsonTextReader(sr);
using var jsonTextReader = new JsonTextReader(sr) { ArrayPool = JsonArrayPool.Shared };
return JsonSerializer.Create().Deserialize<T>(jsonTextReader);
}
catch (JsonException ex) when (bufferedStream?.GetBufferedContent() is { } buffered)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System.IO.Compression;
using System.Threading.Tasks;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json.Serialization;

Expand Down Expand Up @@ -36,6 +37,7 @@ public static async Task WriteAsJson<T>(Stream requestStream, T payload, JsonSer
using var streamWriter = new StreamWriter(streamToWriteTo, EncodingHelpers.Utf8NoBom, bufferSize: 1024, leaveOpen: true);
using var jsonWriter = new JsonTextWriter(streamWriter)
{
ArrayPool = JsonArrayPool.Shared,
CloseOutput = false
};
var serializer = JsonSerializer.Create(serializationSettings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Datadog.Trace.AppSec.WafEncoding;
using Datadog.Trace.Logging;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json.Linq;
using Datadog.Trace.Vendors.Serilog.Events;
Expand Down Expand Up @@ -95,7 +96,7 @@ private static void LogRuleDetailsIfDebugEnabled(JToken root)
}

using var reader = new StreamReader(stream);
using var jsonReader = new JsonTextReader(reader);
using var jsonReader = new JsonTextReader(reader) { ArrayPool = JsonArrayPool.Shared };
root = JToken.ReadFrom(jsonReader);
LogRuleDetailsIfDebugEnabled(root);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
using Datadog.Trace.Configuration;
using Datadog.Trace.SourceGenerators;
using Datadog.Trace.Telemetry.Metrics;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json.Linq;

Expand Down Expand Up @@ -77,7 +79,7 @@ private static bool TryExtractFromJson(string filepath, [NotNullWhen(true)] out
{
using var fr = File.OpenRead(filepath);
using var sr = new StreamReader(fr, Encoding.UTF8);
using var reader = new JsonTextReader(sr);
using var reader = new JsonTextReader(sr) { ArrayPool = JsonArrayPool.Shared };

// Navigate: job.d[] where k == "check_run_id", get v
// Structure: { "job": { "d": [ { "k": "check_run_id", "v": 55411116365.0 } ] } }
Expand Down
6 changes: 4 additions & 2 deletions tracer/src/Datadog.Trace/Ci/Ipc/IpcDualChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

using System;
using System.IO;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json.Serialization;

Expand Down Expand Up @@ -50,7 +52,7 @@ private void OnMessageReceived(ArraySegment<byte> data)
{
using var memoryStream = new MemoryStream(data.Array!, data.Offset, data.Count);
using var reader = new StreamReader(memoryStream, Util.EncodingHelpers.Utf8NoBom);
using var jsonReader = new JsonTextReader(reader);
using var jsonReader = new JsonTextReader(reader) { ArrayPool = JsonArrayPool.Shared };
var message = _jsonSerializer.Deserialize(jsonReader);
if (message != null)
{
Expand All @@ -66,7 +68,7 @@ public bool TrySendMessage(object message)
using var memoryStream = new MemoryStream();
using (var writer = new StreamWriter(memoryStream, Util.EncodingHelpers.Utf8NoBom))
{
using var jsonWriter = new JsonTextWriter(writer);
using var jsonWriter = new JsonTextWriter(writer) { ArrayPool = JsonArrayPool.Shared };
_jsonSerializer.Serialize(jsonWriter, message);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Datadog.Trace.DataStreamsMonitoring;
using Datadog.Trace.DuckTyping;
using Datadog.Trace.Headers;
using Datadog.Trace.Logging;
using Datadog.Trace.Propagators;
using Datadog.Trace.SourceGenerators;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

namespace Datadog.Trace.ClrProfiler.AutoInstrumentation.AWS.Kinesis
Expand Down Expand Up @@ -109,6 +113,7 @@ public static void InjectTraceIntoData<TRecordRequest>(Tracer tracer, TRecordReq
}
}

[TestingAndPrivateOnly]
internal static Dictionary<string, object>? ParseDataObject(MemoryStream dataStream)
{
try
Expand All @@ -123,11 +128,13 @@ public static void InjectTraceIntoData<TRecordRequest>(Tracer tracer, TRecordReq
return null;
}

[TestingAndPrivateOnly]
public static Dictionary<string, object>? MemoryStreamToDictionary(MemoryStream stream)
{
// Convert the MemoryStream to a string
var streamReader = new StreamReader(stream);
var reader = new JsonTextReader(streamReader);
// Default values for StreamReader, but with leaveOpen:true
using var streamReader = new StreamReader(stream, Encoding.UTF8, detectEncodingFromByteOrderMarks: true, bufferSize: 1024, leaveOpen: true);
Comment on lines +135 to +136
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously this wasn't disposing the StreamReader, presumably because that closes the MemoryStream by default. I think technically that was ok, but seemed better to be explicit here, especially as we now have to dispose the JsonTextReader, and don't want there to be any ambiguity around it

using var reader = new JsonTextReader(streamReader) { ArrayPool = JsonArrayPool.Shared };
var serializer = new JsonSerializer();

// Deserialize the JSON string into a Dictionary<string, object>
Expand All @@ -136,10 +143,12 @@ public static void InjectTraceIntoData<TRecordRequest>(Tracer tracer, TRecordReq
return serializer.Deserialize<Dictionary<string, object>>(reader);
}

[TestingAndPrivateOnly]
public static MemoryStream DictionaryToMemoryStream(Dictionary<string, object> dictionary)
{
var memoryStream = new MemoryStream();
var writer = new StreamWriter(memoryStream);
using var streamWriter = new StreamWriter(memoryStream, EncodingHelpers.Utf8NoBom, 1024, leaveOpen: true);
using var writer = new JsonTextWriter(streamWriter) { ArrayPool = JsonArrayPool.Shared };
var serializer = new JsonSerializer();
serializer.Serialize(writer, dictionary);
writer.Flush();
Expand Down
4 changes: 3 additions & 1 deletion tracer/src/Datadog.Trace/Debugger/DebuggerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
using Datadog.Trace.Processors;
using Datadog.Trace.RemoteConfigurationManagement;
using Datadog.Trace.Telemetry;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

#nullable enable
Expand Down Expand Up @@ -643,7 +645,7 @@ private void WriteStartupDebuggerDiagnosticLog()
{
var stringWriter = new StringWriter();
var settings = DebuggerSettings;
using (var writer = new JsonTextWriter(stringWriter))
using (var writer = new JsonTextWriter(stringWriter) { ArrayPool = JsonArrayPool.Shared })
{
writer.WriteStartObject();
writer.WritePropertyName("dynamic_instrumentation_enabled");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
using System.IO;
using System.Reflection;
using Datadog.Trace.Logging;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

#nullable enable
Expand Down Expand Up @@ -40,7 +42,7 @@ private static ImmutableHashSet<string> SafeGetModules()
}

using var sr = new StreamReader(stream!);
using var jsonReader = new JsonTextReader(sr);
using var jsonReader = new JsonTextReader(sr) { ArrayPool = JsonArrayPool.Shared };

var modules = new HashSet<string>();
while (jsonReader.Read())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
using Datadog.Trace.Debugger.Helpers;
using Datadog.Trace.Debugger.Models;
using Datadog.Trace.Logging;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json.Linq;
using static Datadog.Trace.Debugger.Expressions.ProbeExpressionParserHelper;
Expand Down Expand Up @@ -558,7 +560,7 @@ private ExpressionBodyAndParameters ParseProbeExpression(string expressionJson,
var result = Expression.Variable(typeof(T), "$dd_el_result");
scopeMembers.Add(result);

var reader = new JsonTextReader(new StringReader(expressionJson));
using var reader = new JsonTextReader(new StringReader(expressionJson)) { ArrayPool = JsonArrayPool.Shared };
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm pretty sure this was just an accidental miss of the using

SetReaderAtExpressionStart(reader);

var finalExpr = ParseRoot(reader, scopeMembers);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using Datadog.Trace.Debugger.Helpers;
using Datadog.Trace.Debugger.Models;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using ProbeLocation = Datadog.Trace.Debugger.Expressions.ProbeLocation;

Expand Down Expand Up @@ -60,7 +61,7 @@ public DebuggerSnapshotCreator(bool isFullSnapshot, ProbeLocation location, bool
_isFullSnapshot = isFullSnapshot;
_probeLocation = location;
_jsonUnderlyingString = StringBuilderCache.Acquire();
JsonWriter = new JsonTextWriter(new StringWriter(_jsonUnderlyingString));
JsonWriter = new JsonTextWriter(new StringWriter(_jsonUnderlyingString)) { ArrayPool = JsonArrayPool.Shared };
MethodScopeMembers = default;
_captureBehaviour = CaptureBehaviour.Capture;
_errors = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
using Datadog.Trace.Logging;
using Datadog.Trace.RemoteConfigurationManagement;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using OperationCanceledException = System.OperationCanceledException;

Expand Down Expand Up @@ -372,7 +373,7 @@ private bool TrySerializeClass(
out int newTotalBytes)
{
pooledWriter.Reset();
using (var jsonWriter = new JsonTextWriter(pooledWriter) { CloseOutput = false })
using (var jsonWriter = new JsonTextWriter(pooledWriter) { CloseOutput = false, ArrayPool = JsonArrayPool.Shared })
{
serializer.Serialize(jsonWriter, classScope);
jsonWriter.Flush();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using Datadog.Trace.Debugger.Models;
using Datadog.Trace.Logging;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

namespace Datadog.Trace.Debugger.Upload
Expand Down Expand Up @@ -72,7 +73,7 @@ internal static ArraySegment<byte> CreateEventMetadata(string serviceName, strin
const int bufferSize = 256;
using var stream = new MemoryStream(capacity: bufferSize);
using (var streamWriter = new StreamWriter(stream, EncodingHelpers.Utf8NoBom, bufferSize: bufferSize, leaveOpen: true))
using (var jsonWriter = new JsonTextWriter(streamWriter))
using (var jsonWriter = new JsonTextWriter(streamWriter) { ArrayPool = JsonArrayPool.Shared })
{
jsonWriter.CloseOutput = false;
jsonWriter.Formatting = Formatting.None;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
using System.Linq;
using System.Text.RegularExpressions;
using Datadog.Trace.Configuration;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

#nullable enable
Expand Down Expand Up @@ -37,7 +39,7 @@ public List<Range> GetTokens(Evidence evidence, IntegrationId? integrationId = n

var redactedRanges = new List<Range>();
using var sr = new StringReader(value);
using var reader = new JsonTextReader(sr);
using var reader = new JsonTextReader(sr) { ArrayPool = JsonArrayPool.Shared };

while (reader.Read())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
using Datadog.Trace.ClrProfiler.AutoInstrumentation.Logging;
using Datadog.Trace.Configuration;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

namespace Datadog.Trace.Logging.DirectSubmission.Formatting
Expand Down Expand Up @@ -276,11 +277,11 @@ internal static void WriteValue(JsonWriter writer, object? value)
}

internal static JsonTextWriter GetJsonWriter(StringBuilder builder)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The callers "own" and handle disposing the returned object

{
var writer = new JsonTextWriter(new StringWriter(builder));
writer.Formatting = Vendors.Newtonsoft.Json.Formatting.None;
return writer;
}
=> new JsonTextWriter(new StringWriter(builder))
{
ArrayPool = JsonArrayPool.Shared,
Formatting = Vendors.Newtonsoft.Json.Formatting.None,
};

/// <summary>
/// Format the log, based on <see cref="Datadog.Trace.Vendors.Serilog.Formatting.Json.JsonFormatter"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using Datadog.Trace.SourceGenerators;
using Datadog.Trace.Telemetry;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json.Linq;

Expand Down Expand Up @@ -419,7 +420,7 @@ private void HandleConfigUpdate(AgentConfiguration config)
{
using var stream = new MemoryStream(contents);
using var streamReader = new StreamReader(stream);
using var jsonReader = new JsonTextReader(streamReader);
using var jsonReader = new JsonTextReader(streamReader) { ArrayPool = JsonArrayPool.Shared };
return JObject.Load(jsonReader);
}
catch (Exception ex)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
using System.IO;
using System.Text;
using Datadog.Trace.RemoteConfigurationManagement.Protocol.Tuf;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Util.Streams;
using Datadog.Trace.Vendors.Newtonsoft.Json;

namespace Datadog.Trace.RemoteConfigurationManagement.Json
Expand All @@ -24,7 +26,10 @@ public override TufRoot ReadJson(JsonReader reader, Type objectType, TufRoot exi

using var stream = new MemoryStream(contentDecode);
using var streamReader = new StreamReader(stream);
using var jsonReader = new JsonTextReader(streamReader);
using var jsonReader = new JsonTextReader(streamReader)
{
ArrayPool = JsonArrayPool.Shared,
};
return serializer.Deserialize<TufRoot>(jsonReader);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#nullable enable

using System.IO;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;

namespace Datadog.Trace.RemoteConfigurationManagement
Expand All @@ -26,7 +27,11 @@ public NamedRawFile(RemoteConfigurationPath path, byte[] value)
{
using var stream = new MemoryStream(RawFile);
using var streamReader = new StreamReader(stream);
using var jsonReader = new JsonTextReader(streamReader);
using var jsonReader = new JsonTextReader(streamReader)
{
ArrayPool = JsonArrayPool.Shared,
};

return new NamedTypedFile<T?>(Path.Path, JsonSerializer.CreateDefault().Deserialize<T>(jsonReader));
}
}
Expand Down
3 changes: 2 additions & 1 deletion tracer/src/Datadog.Trace/TracerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
using Datadog.Trace.Telemetry;
using Datadog.Trace.Util;
using Datadog.Trace.Util.Http;
using Datadog.Trace.Util.Json;
using Datadog.Trace.Vendors.Newtonsoft.Json;
using Datadog.Trace.Vendors.StatsdClient;

Expand Down Expand Up @@ -361,7 +362,7 @@ private static async Task WriteDiagnosticLog(TracerManager instance, MutableSett

var stringWriter = new StringWriter();

using (var writer = new JsonTextWriter(stringWriter))
using (var writer = new JsonTextWriter(stringWriter) { ArrayPool = JsonArrayPool.Shared })
{
void WriteDictionary(IReadOnlyDictionary<string, string> dictionary)
{
Expand Down
Loading
Loading