From 8c20be0d95f480011f5ae2580eb91820dceabcfd Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 4 Mar 2024 23:34:10 +0100 Subject: [PATCH] [backend/federation] Improve parsing of ASCollection & ASOrderedCollection --- .../ActivityStreams/Types/ASCollection.cs | 33 +++++++++++++++---- .../Types/ASOrderedCollection.cs | 31 ++++++++++++----- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASCollection.cs b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASCollection.cs index ca9dd922..66d312cd 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASCollection.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASCollection.cs @@ -57,19 +57,38 @@ public sealed class ASCollectionConverter : JsonConverter { if (reader.TokenType == JsonToken.StartArray) { - var obj = JArray.Load(reader); - var valueList = obj.ToObject>>(); - if (valueList is { Count: > 0 }) - return VC.HandleObject(valueList[0], objectType); + var obj = JArray.Load(reader); + + try + { + var valueList = obj.ToObject>>(); + if (valueList is { Count: > 0 }) + return VC.HandleObject(valueList[0], objectType); + } + catch + { + // ignored + } + var list = obj.ToObject>(); return list == null || list.Count == 0 ? null : list[0]; } if (reader.TokenType == JsonToken.StartObject) { - var obj = JObject.Load(reader); - var valueObj = obj.ToObject>(); - return valueObj != null ? VC.HandleObject(valueObj, objectType) : obj.ToObject(); + var obj = JObject.Load(reader); + try + { + var valueObj = obj.ToObject>(); + if (valueObj != null) + return VC.HandleObject(valueObj, objectType); + } + catch + { + // ignored + } + + return obj.ToObject(); } return null; diff --git a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASOrderedCollection.cs b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASOrderedCollection.cs index e1ae8b41..9669d5b0 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASOrderedCollection.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASOrderedCollection.cs @@ -61,21 +61,34 @@ public sealed class ASOrderedCollectionConverter : JsonConverter { if (reader.TokenType == JsonToken.StartArray) { - var obj = JArray.Load(reader); - var valueList = obj.ToObject>>(); - if (valueList?.Any(p => p.Value != null) ?? false) - return ValueObjectConverter.HandleObject(valueList[0], objectType); + var obj = JArray.Load(reader); + try + { + var valueList = obj.ToObject>>(); + if (valueList?.Any(p => p.Value != null) ?? false) + return ValueObjectConverter.HandleObject(valueList[0], objectType); + } + catch + { + //ignored + } + var list = obj.ToObject>(); return list == null || list.Count == 0 ? null : list[0]; } if (reader.TokenType == JsonToken.StartObject) { - var obj = JObject.Load(reader); - var valueObj = obj.ToObject>(); - return valueObj is { Value: not null } - ? ValueObjectConverter.HandleObject(valueObj, objectType) - : obj.ToObject(); + var obj = JObject.Load(reader); + try { } + catch + { + var valueObj = obj.ToObject>(); + if (valueObj is { Value: not null }) + return ValueObjectConverter.HandleObject(valueObj, objectType); + } + + return obj.ToObject(); } return null;