Skip to content

Commit 74237f9

Browse files
committed
prevent pal overwrite image data when sharing same res idx #164
1 parent 6c514e2 commit 74237f9

3 files changed

Lines changed: 10 additions & 1 deletion

File tree

FreeMote.Psb/PsbExtension.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,7 @@ public static byte[] SaveAsMdf(this PSB psb, uint? key = null)
807807
/// <returns></returns>
808808
public static MemoryStream EncodeMdf(Stream stream, string key, int? keyLength, bool keepHeader)
809809
{
810+
Logger.LogHint($"[MDF] key: {key} len: {keyLength}");
810811
var ms = new MemoryStream((int) stream.Length); //MsManager.GetStream("EncodeMdf", (int)stream.Length);
811812
EncodeMdf(stream, ms, key, keyLength, keepHeader);
812813
return ms;

FreeMote.Psb/PsbResHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,7 @@ public static ImageMetadata GenerateImageMetadata(PsbDictionary d, PsbResource r
797797
PsbString palTypeString = null;
798798
if (d["pal"] is PsbResource palRes)
799799
{
800-
if (duplicatePalette)
800+
if (duplicatePalette || (palRes != null && palRes == r)) //prevent pal overwrite resource
801801
{
802802
palResource = new PsbResource(palRes.Index);
803803
d["pal"] = palResource;

FreeMote.Psb/Resources/ImageMetadata.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,14 @@ public byte[] PalData
144144

145145
internal set
146146
{
147+
if (Palette != null && ReferenceEquals(Palette, Resource))
148+
{
149+
// Palette and image data must not share the same backing resource when writing.
150+
// Otherwise assigning PalData would overwrite Data.
151+
Logger.LogWarn("[WARN] Palette and image data must not share the same backing resource when writing.");
152+
Palette = new PsbResource();
153+
}
154+
147155
Palette ??= new PsbResource();
148156

149157
Palette.Data = value;

0 commit comments

Comments
 (0)