prepo: Resolve JSON parsing issues in prepo report handling (#1022)

It seems MsgPack.Cli incorrectly converts some unicode control characters directly to JSON literal Unicode strings (eg. '\1'). As these are invalid, pretty printing the JSON report fails.

This removes pretty printing, pending a proper implementation, and tidies up MsgPack deserialization.
This commit is contained in:
jduncanator 2020-03-25 09:26:37 +11:00 committed by GitHub
parent 17200214df
commit daecb1193d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,3 +1,4 @@
using MsgPack;
using MsgPack.Serialization; using MsgPack.Serialization;
using Ryujinx.Common; using Ryujinx.Common;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
@ -83,35 +84,21 @@ namespace Ryujinx.HLE.HOS.Services.Prepo
private string ReadReportBuffer(byte[] buffer, string room, UserId userId) private string ReadReportBuffer(byte[] buffer, string room, UserId userId)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder builder = new StringBuilder();
MessagePackObject deserializedReport = MessagePackSerializer.UnpackMessagePackObject(buffer);
sb.AppendLine(); builder.AppendLine();
sb.AppendLine("PlayReport log:"); builder.AppendLine("PlayReport log:");
if (!userId.IsNull) if (!userId.IsNull)
{ {
sb.AppendLine($" UserId: {userId.ToString()}"); builder.AppendLine($" UserId: {userId.ToString()}");
} }
sb.AppendLine($" Room: {room}"); builder.AppendLine($" Room: {room}");
builder.AppendLine($" Report: {deserializedReport}");
var deserializedReport = Deserialize<dynamic>(buffer); return builder.ToString();
string jsonReport = Encoding.ASCII.GetString(JsonSerializer.PrettyPrintByteArray(Encoding.UTF8.GetBytes(deserializedReport.ToString())));
sb.AppendLine($" Report:");
sb.AppendLine(jsonReport);
return sb.ToString();
}
private static T Deserialize<T>(byte[] bytes)
{
MessagePackSerializer serializer = MessagePackSerializer.Get<T>();
using (MemoryStream byteStream = new MemoryStream(bytes))
{
return (T)serializer.Unpack(byteStream);
}
} }
} }
} }