diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2022-05-24 16:05:19 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2022-05-24 16:05:19 -0700 |
| commit | bb7fe19f7e331f0e8c79f4da61543981acd36422 (patch) | |
| tree | 731d0ef86ec468b90c0b44b43f282f2df04e0496 /hotline/flattened_file_object.go | |
| parent | 90606c7524caa82180dad8f2ce613f1c07385b29 (diff) | |
Fix file corruption bug for commented files
This fixes a bug that happens when an uploaded file contains a file comment. The bug happens because the comment byte length was not included when calculating the length of the information header, causing the comment bytes to be appendedto the file.
Diffstat (limited to 'hotline/flattened_file_object.go')
| -rw-r--r-- | hotline/flattened_file_object.go | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/hotline/flattened_file_object.go b/hotline/flattened_file_object.go index 02804f6..ee8a69b 100644 --- a/hotline/flattened_file_object.go +++ b/hotline/flattened_file_object.go @@ -67,18 +67,18 @@ func NewFlatFileInformationFork(fileName string) FlatFileInformationFork { ModifyDate: []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}, // TODO: implement NameScript: make([]byte, 2), // TODO: What is this? Name: []byte(fileName), + CommentSize: []byte{0, 4}, Comment: []byte("TODO"), // TODO: implement (maybe?) } } -// Size of the flat file information fork, which is the fixed size of 72 bytes -// plus the number of bytes in the FileName -// TODO: plus the size of the Comment! +// DataSize calculates the size of the flat file information fork, which is +// 72 bytes for the fixed length fields plus the length of the Name + Comment func (ffif FlatFileInformationFork) DataSize() []byte { size := make([]byte, 4) - nameLen := len(ffif.Name) + //TODO: Can I do math directly on two byte slices? - dataSize := nameLen + 74 + dataSize := len(ffif.Name) + len(ffif.Comment) + 74 binary.BigEndian.PutUint32(size, uint32(dataSize)) @@ -184,9 +184,8 @@ func (f flattenedFileObject) BinaryMarshal() []byte { out = append(out, f.FlatFileInformationFork.NameScript...) out = append(out, f.FlatFileInformationFork.ReadNameSize()...) out = append(out, f.FlatFileInformationFork.Name...) - - // TODO: Implement commentlen and comment field - out = append(out, []byte{0, 0}...) + out = append(out, f.FlatFileInformationFork.CommentSize...) + out = append(out, f.FlatFileInformationFork.Comment...) out = append(out, f.FlatFileDataForkHeader.ForkType...) out = append(out, f.FlatFileDataForkHeader.CompressionType...) |