Skip to content

Commit 9be5f90

Browse files
committed
fix: add ArgumentNullException guards to BaseReflectionConverter entry points
Replace cryptic NullReferenceExceptions with explicit ArgumentNullException throwing the parameter name. Guards added to TryModify, TryModifyField, TryModifyProperty, Serialize, SerializeFields, SerializeProperties, Deserialize, TryDeserializeValue, TryDeserializeValueInternal, DeserializeValueAsJsonElement, CreateInstance, and GetDefaultValue.
1 parent 7669cfa commit 9be5f90

4 files changed

Lines changed: 40 additions & 2 deletions

File tree

ReflectorNet/src/Converter/Reflection/Base/BaseReflectionConverter.DefaultValue.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public abstract partial class BaseReflectionConverter<T> : IReflectionConverter
4343
/// <exception cref="ArgumentException">Thrown when type cannot be instantiated due to constructor limitations.</exception>
4444
public virtual object? CreateInstance(Reflector reflector, Type type)
4545
{
46-
if (type == null)
47-
throw new ArgumentNullException(nameof(type));
46+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
47+
if (type == null) throw new ArgumentNullException(nameof(type));
4848

4949
// Handle enums
5050
if (type.IsEnum)
@@ -155,6 +155,9 @@ public abstract partial class BaseReflectionConverter<T> : IReflectionConverter
155155
/// <returns>An appropriate default value for the specified type.</returns>
156156
public virtual object? GetDefaultValue(Reflector reflector, Type type)
157157
{
158+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
159+
if (type == null) throw new ArgumentNullException(nameof(type));
160+
158161
// Handle nullable types first
159162
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
160163
return null;

ReflectorNet/src/Converter/Reflection/Base/BaseReflectionConverter.Deserialize.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public abstract partial class BaseReflectionConverter<T> : IReflectionConverter
5959
ILogger? logger = null,
6060
DeserializationContext? context = null)
6161
{
62+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
63+
if (data == null) throw new ArgumentNullException(nameof(data));
64+
6265
if (!TryDeserializeValue(
6366
reflector,
6467
data: data,
@@ -216,6 +219,8 @@ protected virtual bool TryDeserializeValue(
216219
Logs? logs = null,
217220
ILogger? logger = null)
218221
{
222+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
223+
219224
if (data == null)
220225
{
221226
result = null;
@@ -270,6 +275,10 @@ protected virtual bool TryDeserializeValueInternal(
270275
Logs? logs = null,
271276
ILogger? logger = null)
272277
{
278+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
279+
if (data == null) throw new ArgumentNullException(nameof(data));
280+
if (type == null) throw new ArgumentNullException(nameof(type));
281+
273282
var padding = StringUtils.GetPadding(depth);
274283

275284
if (AllowCascadeSerialization)
@@ -361,6 +370,10 @@ protected virtual bool TryDeserializeValueInternal(
361370
Logs? logs = null,
362371
ILogger? logger = null)
363372
{
373+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
374+
if (data == null) throw new ArgumentNullException(nameof(data));
375+
if (type == null) throw new ArgumentNullException(nameof(type));
376+
364377
return reflector.JsonSerializer.Deserialize(
365378
reflector,
366379
data.valueJsonElement,

ReflectorNet/src/Converter/Reflection/Base/BaseReflectionConverter.Modify.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ public virtual bool TryModify(
5757
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
5858
ILogger? logger = null)
5959
{
60+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
61+
if (data == null) throw new ArgumentNullException(nameof(data));
62+
if (type == null) throw new ArgumentNullException(nameof(type));
63+
6064
var padding = StringUtils.GetPadding(depth);
6165

6266
if (obj == null)
@@ -256,6 +260,11 @@ protected virtual bool TryModifyField(
256260
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
257261
ILogger? logger = null)
258262
{
263+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
264+
if (obj == null) throw new ArgumentNullException(nameof(obj));
265+
if (objType == null) throw new ArgumentNullException(nameof(objType));
266+
if (fieldValue == null) throw new ArgumentNullException(nameof(fieldValue));
267+
259268
var padding = StringUtils.GetPadding(depth);
260269

261270
if (string.IsNullOrEmpty(fieldValue.name))
@@ -371,6 +380,11 @@ protected virtual bool TryModifyProperty(
371380
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
372381
ILogger? logger = null)
373382
{
383+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
384+
if (obj == null) throw new ArgumentNullException(nameof(obj));
385+
if (objType == null) throw new ArgumentNullException(nameof(objType));
386+
if (propertyValue == null) throw new ArgumentNullException(nameof(propertyValue));
387+
374388
var padding = StringUtils.GetPadding(depth);
375389

376390
if (string.IsNullOrEmpty(propertyValue.name))

ReflectorNet/src/Converter/Reflection/Base/BaseReflectionConverter.Serialize.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public virtual SerializedMember Serialize(
3232
ILogger? logger = null,
3333
SerializationContext? context = null)
3434
{
35+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
36+
3537
var actualType = fallbackType ?? obj?.GetType() ?? typeof(T);
3638

3739
return InternalSerialize(
@@ -56,6 +58,9 @@ public virtual SerializedMember Serialize(
5658
ILogger? logger = null,
5759
SerializationContext? context = null)
5860
{
61+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
62+
if (obj == null) throw new ArgumentNullException(nameof(obj));
63+
5964
var serializedFields = default(SerializedMemberList);
6065
var objType = obj.GetType();
6166

@@ -116,6 +121,9 @@ public virtual SerializedMember Serialize(
116121
ILogger? logger = null,
117122
SerializationContext? context = null)
118123
{
124+
if (reflector == null) throw new ArgumentNullException(nameof(reflector));
125+
if (obj == null) throw new ArgumentNullException(nameof(obj));
126+
119127
var serializedProperties = default(SerializedMemberList);
120128
var objType = obj.GetType();
121129

0 commit comments

Comments
 (0)