From cfb9c729abb362a999648cc045e81b913ffbfabc Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Fri, 3 Apr 2020 00:08:59 -0400 Subject: [PATCH] this bug was hidden for quite some time... line 71-72 file name comes before offset! --- .../Ultra3D/Ultra3DRBXDataFormat.cs | 125 +++++++++--------- 1 file changed, 62 insertions(+), 63 deletions(-) diff --git a/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/Ultra3D/Ultra3DRBXDataFormat.cs b/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/Ultra3D/Ultra3DRBXDataFormat.cs index a1954a89..5e623ab3 100644 --- a/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/Ultra3D/Ultra3DRBXDataFormat.cs +++ b/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/Ultra3D/Ultra3DRBXDataFormat.cs @@ -6,79 +6,78 @@ using UniversalEditor.ObjectModels.FileSystem; namespace UniversalEditor.DataFormats.FileSystem.Ultra3D { - public class Ultra3DRBXDataFormat : DataFormat - { - private static DataFormatReference _dfr = null; - protected override DataFormatReference MakeReferenceInternal() - { - if (_dfr == null) - { - _dfr = base.MakeReferenceInternal(); - _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All); - } - return _dfr; - } + public class Ultra3DRBXDataFormat : DataFormat + { + private static DataFormatReference _dfr = null; + protected override DataFormatReference MakeReferenceInternal() + { + if (_dfr == null) + { + _dfr = base.MakeReferenceInternal(); + _dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.All); + } + return _dfr; + } - protected override void LoadInternal(ref ObjectModel objectModel) - { - FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel); - if (fsom == null) return; + protected override void LoadInternal(ref ObjectModel objectModel) + { + FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel); + if (fsom == null) return; - IO.Reader br = base.Accessor.Reader; + IO.Reader br = base.Accessor.Reader; - int header = br.ReadInt32(); - if (header != 0x0BA99A9E) throw new InvalidDataFormatException("File does not begin with header 0x0BA99A9E"); + int header = br.ReadInt32(); + if (header != 0x0BA99A9E) throw new InvalidDataFormatException("File does not begin with header 0x0BA99A9E"); - uint fileCount = br.ReadUInt32(); - for (uint i = 0; i < fileCount; i++) - { - File file = new File(); - file.Name = br.ReadFixedLengthString(12).TrimNull(); + uint fileCount = br.ReadUInt32(); + for (uint i = 0; i < fileCount; i++) + { + File file = new File(); + file.Name = br.ReadFixedLengthString(12).TrimNull(); - uint offset = br.ReadUInt32(); - file.Properties.Add("offset", offset); - file.Properties.Add("reader", br); + uint offset = br.ReadUInt32(); + file.Properties.Add("offset", offset); + file.Properties.Add("reader", br); - file.DataRequest += file_DataRequest; - fsom.Files.Add(file); - } - } + file.DataRequest += file_DataRequest; + fsom.Files.Add(file); + } + } - private void file_DataRequest(object sender, DataRequestEventArgs e) - { - File file = (sender as File); - - uint offset = (uint)file.Properties["offset"]; - IO.Reader br = (IO.Reader)file.Properties["reader"]; - - br.Accessor.Position = offset; - uint length = br.ReadUInt32(); - e.Data = br.ReadBytes(length); - } + private void file_DataRequest(object sender, DataRequestEventArgs e) + { + File file = (sender as File); - protected override void SaveInternal(ObjectModel objectModel) - { - FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel); - if (fsom == null) return; + uint offset = (uint)file.Properties["offset"]; + IO.Reader br = (IO.Reader)file.Properties["reader"]; - IO.Writer bw = base.Accessor.Writer; - bw.WriteInt32(0x0BA99A9E); + br.Accessor.Position = offset; + uint length = br.ReadUInt32(); + e.Data = br.ReadBytes(length); + } - bw.WriteInt32(fsom.Files.Count); + protected override void SaveInternal(ObjectModel objectModel) + { + FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel); + if (fsom == null) return; - uint offset = (uint)(8 + ((12 + 4) * fsom.Files.Count)); - foreach (File file in fsom.Files) - { - bw.WriteUInt32(offset); - bw.WriteFixedLengthString(file.Name, 12); + IO.Writer bw = base.Accessor.Writer; + bw.WriteInt32(0x0BA99A9E); + bw.WriteInt32(fsom.Files.Count); - offset += (uint)(4 + file.Size); - } - foreach (File file in fsom.Files) - { - bw.WriteUInt32((uint)file.Size); - bw.WriteBytes(file.GetData()); - } - } - } + uint offset = (uint)(8 + ((12 + 4) * fsom.Files.Count)); + foreach (File file in fsom.Files) + { + bw.WriteFixedLengthString(file.Name, 12); + bw.WriteUInt32(offset); + + offset += (uint)(4 + file.Size); + } + foreach (File file in fsom.Files) + { + bw.WriteUInt32((uint)file.Size); + bw.WriteBytes(file.GetData()); + } + } + } }