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_test.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_test.go')
| -rw-r--r-- | hotline/flattened_file_object_test.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/hotline/flattened_file_object_test.go b/hotline/flattened_file_object_test.go index df05c09..5bbaf1d 100644 --- a/hotline/flattened_file_object_test.go +++ b/hotline/flattened_file_object_test.go @@ -74,3 +74,67 @@ func TestNewFlattenedFileObject(t *testing.T) { }) } } + +func Test_flattenedFileObject_BinaryMarshal(t *testing.T) { + + testData, _ := hex.DecodeString("46494c500001000000000000000000000000000000000002494e464f000000000000000000000052414d414354455854747478740000000000000100000000000000000000000000000000000000000000000000000000000000000007700000ba74247307700000ba74247300000008746573742e74787400004441544100000000000000000000000474657374") + testFile := ReadFlattenedFileObject(testData) + testFile.FlatFileInformationFork.Comment = []byte("test!") + testFile.FlatFileInformationFork.CommentSize = []byte{0x00, 0x05} + + type fields struct { + FlatFileHeader FlatFileHeader + FlatFileInformationForkHeader FlatFileInformationForkHeader + FlatFileInformationFork FlatFileInformationFork + FlatFileDataForkHeader FlatFileDataForkHeader + FileData []byte + } + tests := []struct { + name string + fields fields + want []byte + }{ + { + name: "with a valid file", + fields: fields{ + FlatFileHeader: testFile.FlatFileHeader, + FlatFileInformationForkHeader: testFile.FlatFileInformationForkHeader, + FlatFileInformationFork: testFile.FlatFileInformationFork, + FlatFileDataForkHeader: testFile.FlatFileDataForkHeader, + FileData: testFile.FileData, + }, + want: []byte{ + 0x46, 0x49, 0x4c, 0x50, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x49, 0x4e, 0x46, 0x4f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x41, 0x4d, 0x41, 0x43, 0x54, 0x45, 0x58, 0x54, + 0x74, 0x74, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, + 0xba, 0x74, 0x24, 0x73, 0x07, 0x70, 0x00, 0x00, + 0xba, 0x74, 0x24, 0x73, 0x00, 0x00, 0x00, 0x08, + 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74, 0x78, 0x74, + 0x00, 0x05, 0x74, 0x65, 0x73, 0x74, 0x21, 0x44, + 0x41, 0x54, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + f := flattenedFileObject{ + FlatFileHeader: tt.fields.FlatFileHeader, + FlatFileInformationForkHeader: tt.fields.FlatFileInformationForkHeader, + FlatFileInformationFork: tt.fields.FlatFileInformationFork, + FlatFileDataForkHeader: tt.fields.FlatFileDataForkHeader, + FileData: tt.fields.FileData, + } + assert.Equalf(t, tt.want, f.BinaryMarshal(), "BinaryMarshal()") + }) + } +} |