Skip to content

Commit

Permalink
fix: MirrorNetworking#3144 Reader/Writer Sprite null support & test t…
Browse files Browse the repository at this point in the history
…o guarantee it never happens again
  • Loading branch information
vis2k committed Apr 29, 2022
1 parent f413c91 commit 2984350
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
8 changes: 7 additions & 1 deletion Assets/Mirror/Runtime/NetworkReaderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,13 @@ public static Texture2D ReadTexture2D(this NetworkReader reader)

public static Sprite ReadSprite(this NetworkReader reader)
{
return Sprite.Create(reader.ReadTexture2D(), reader.ReadRect(), reader.ReadVector2());
// support 'null' textures for [SyncVar]s etc.
// https://github.com/vis2k/Mirror/issues/3144
Texture2D texture = reader.ReadTexture2D();
if (texture == null) return null;

// otherwise create a valid sprite
return Sprite.Create(texture, reader.ReadRect(), reader.ReadVector2());
}
}
}
9 changes: 9 additions & 0 deletions Assets/Mirror/Runtime/NetworkWriterExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,15 @@ public static void WriteTexture2D(this NetworkWriter writer, Texture2D texture2D

public static void WriteSprite(this NetworkWriter writer, Sprite sprite)
{
// support 'null' textures for [SyncVar]s etc.
// https://github.com/vis2k/Mirror/issues/3144
// simply send a 'null' for texture content.
if (sprite == null)
{
writer.WriteTexture2D(null);
return;
}

writer.WriteTexture2D(sprite.texture);
writer.WriteRect(sprite.rect);
writer.WriteVector2(sprite.pivot);
Expand Down
14 changes: 14 additions & 0 deletions Assets/Mirror/Tests/Editor/NetworkWriterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1520,5 +1520,19 @@ public void WriteSprite_normal()
Assert.That(sprite.texture.height, Is.EqualTo(example.texture.height));
Assert.That(sprite.texture.GetPixels32().SequenceEqual(example.texture.GetPixels32()));
}

// test to prevent https://github.com/vis2k/Mirror/issues/3144
[Test]
public void WriteSprite_Null()
{
// write
NetworkWriter writer = new NetworkWriter();
writer.WriteSprite(null);

// read
NetworkReader reader = new NetworkReader(writer.ToArray());
Sprite sprite = reader.ReadSprite();
Assert.That(sprite, Is.Null);
}
}
}

0 comments on commit 2984350

Please sign in to comment.