1
0
mirror of synced 2024-11-30 18:24:39 +01:00

Fix TXE decoding with bad image sizes

This commit is contained in:
KillzXGaming 2019-08-08 17:12:11 -04:00
parent 79d78f64ad
commit 855037d21c
8 changed files with 50 additions and 14 deletions

View File

@ -77,7 +77,7 @@ namespace FirstPlugin
//Lets set our method of decoding //Lets set our method of decoding
PlatformSwizzle = PlatformSwizzle.Platform_Gamecube; PlatformSwizzle = PlatformSwizzle.Platform_Gamecube;
int imageDataSize = reader.ReadInt32(); int imageDataSize = (int)reader.BaseStream.Length - 32;
reader.SeekBegin(32); reader.SeekBegin(32);

View File

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;
using System.Reflection;
namespace Toolbox.Library
{
public class StaticDynamic : DynamicObject
{
private Type _type;
public StaticDynamic(Type type) { _type = type; }
// Handle static properties
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
PropertyInfo prop = _type.GetProperty(binder.Name, BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.Public);
if (prop == null)
{
result = null;
return false;
}
result = prop.GetValue(null, null);
return true;
}
// Handle static methods
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
MethodInfo method = _type.GetMethod(binder.Name, BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.Public);
if (method == null)
{
result = null;
return false;
}
result = method.Invoke(null, args);
return true;
}
}
}

View File

@ -744,7 +744,7 @@ namespace Toolbox.Library
private static byte[] DecodeRgb5A3(FileReader stream, uint width, uint height) private static byte[] DecodeRgb5A3(FileReader stream, uint width, uint height)
{ {
uint numBlocksW = width / 4; //4 byte block width uint numBlocksW = width / 4; //4 byte block width
uint numBlocksH = height / 4; //4 byte block height uint numBlocksH = height / 4; //4 byte block height
byte[] decodedData = new byte[width * height * 4]; byte[] decodedData = new byte[width * height * 4];

View File

@ -295,6 +295,7 @@
<Compile Include="Rendering\GenericModelRenderer\GenericRenderedObject.cs" /> <Compile Include="Rendering\GenericModelRenderer\GenericRenderedObject.cs" />
<Compile Include="Security\Cryptography\crc32.cs" /> <Compile Include="Security\Cryptography\crc32.cs" />
<Compile Include="DrawableContainer.cs" /> <Compile Include="DrawableContainer.cs" />
<Compile Include="StaticDynamic.cs" />
<Compile Include="Texture Decoding\3DS\ETC1.cs" /> <Compile Include="Texture Decoding\3DS\ETC1.cs" />
<Compile Include="FileFormats\Animation\SMD.cs" /> <Compile Include="FileFormats\Animation\SMD.cs" />
<Compile Include="FileFormats\APNG\APNG.cs" /> <Compile Include="FileFormats\APNG\APNG.cs" />

View File

@ -29,8 +29,9 @@ namespace Toolbox
{ {
listViewCustom1.Items.Clear(); listViewCustom1.Items.Clear();
foreach (var item in FileManager.GetFileFormats()) foreach (Type t in FileManager.GetFileFormats())
{ {
dynamic item = new StaticDynamic(t);
for (int i = 0; i < item.Extension.Length; i++) for (int i = 0; i < item.Extension.Length; i++)
{ {
string Extension; string Extension;

View File

@ -25,8 +25,8 @@ namespace Toolbox
private static MainForm _instance; private static MainForm _instance;
public static MainForm Instance { get { return _instance == null ? _instance = new MainForm() : _instance; } } public static MainForm Instance { get { return _instance == null ? _instance = new MainForm() : _instance; } }
IFileFormat[] SupportedFormats; IFileFormat[] SupportedFormats { get { return FileManager.GetFileFormats(); } }
IFileMenuExtension[] FileMenuExtensions; IFileMenuExtension[] FileMenuExtensions { get { return FileManager.GetMenuExtensions(); } }
public void AddChildContainer(Form form) public void AddChildContainer(Form form)
{ {
@ -64,12 +64,6 @@ namespace Toolbox
} }
} }
public void Reload()
{
SupportedFormats = FileManager.GetFileFormats();
FileMenuExtensions = FileManager.GetMenuExtensions();
}
//Use for files opened with program //Use for files opened with program
public List<string> openedFiles = new List<string>(); public List<string> openedFiles = new List<string>();
@ -122,7 +116,6 @@ namespace Toolbox
LoadPLugins(); LoadPLugins();
UpdateToolbar(HasVersionFile); UpdateToolbar(HasVersionFile);
Reload();
LoadConfig(); LoadConfig();
LoadMDITheme(); LoadMDITheme();
LoadRecentList(); LoadRecentList();
@ -247,8 +240,6 @@ namespace Toolbox
public void OpenFile(string FileName, bool InActiveEditor = false) public void OpenFile(string FileName, bool InActiveEditor = false)
{ {
Reload();
if (File.Exists(FileName)) if (File.Exists(FileName))
SaveRecentFile(FileName); SaveRecentFile(FileName);