aboutsummaryrefslogtreecommitdiff
path: root/hotline/flattened_file_object.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-05-24 16:05:19 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2022-05-24 16:05:19 -0700
commitbb7fe19f7e331f0e8c79f4da61543981acd36422 (patch)
tree731d0ef86ec468b90c0b44b43f282f2df04e0496 /hotline/flattened_file_object.go
parent90606c7524caa82180dad8f2ce613f1c07385b29 (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.go15
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...)