-
Notifications
You must be signed in to change notification settings - Fork 79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tweak the writing of offsets when writing user defined properties #106
Conversation
@@ -183,7 +183,7 @@ public void Write(System.IO.BinaryWriter bw) | |||
|
|||
int size1 = (int)(bw.BaseStream.Position - oc1.OffsetPS); | |||
|
|||
bw.Seek(oc1.OffsetPS + 4, System.IO.SeekOrigin.Begin); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This +4 was causing it to overwrite the property count rather than the size (I ended up with a size of 0 and >100 properties, which is just wrong)
bw.Seek((int)oc1.PropertyIdentifierOffsets[i], System.IO.SeekOrigin.Begin); //Offset of 4 to Offset value | ||
bw.Write(oc1.PropertyOffsets[i] - oc1.OffsetPS); | ||
bw.Seek((int)oc1.PropertyIdentifierOffsets[i] + 4, System.IO.SeekOrigin.Begin); //Offset of 4 to Offset value | ||
bw.Write((int)(oc1.PropertyOffsets[i] - oc1.OffsetPS)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed this to match the case on lines 207/208, otherwise it was writing the offset in the wrong place, and also writing 8 bytes rather than 4
1fea0aa
to
3b3b33f
Compare
@Numpsy , do you have a test case to add as a unit test for this PR? Thanks! |
I've been working with a few unit tests locally, but it was a bit hard to do them for each PR because you need both this one and the dictionary ones to write all the required data. Thanks for merging the changes :-) |
As per the Microsoft documentation at https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-oshared/fe59ffd9-79e9-44fb-a1c9-2466057b05c6 -
but the padding code was commented out?
When debugging an attempt at writing the user defined properties, I had a case where the size ended up at 299 bytes when it should really be padded up to 300, and I think this fixes that.
@@note@@ It might need additional padding adding to the end of the user defined section, but the documents I'm testing with are all ending up with the size a multiple of 4 with no padding, so I don't yet have a test for that case.