Commit 5d9f21de36644a8c27a5b1360d033faf28824cf3
1 parent
dc4dffd5
Consume 2 null bytes between name string and tag string if the file being parsed…
… has a tag or controltiptext.
Showing
1 changed file
with
11 additions
and
5 deletions
oletools/oleform.py
| ... | ... | @@ -273,12 +273,19 @@ def consume_OleSiteConcreteControl(stream): |
| 273 | 273 | control_tip_text_len = consume_CountOfBytesWithCompressionFlag(stream) |
| 274 | 274 | propmask.consume(stream, [('fRuntimeLicKey', 4), ('fControlSource', 4), ('fRowSource', 4)]) |
| 275 | 275 | # SiteExtraDataBlock: [MS-OFORMS] 2.2.10.12.4 |
| 276 | - name = stream.read(name_len) | |
| 276 | + name = None | |
| 277 | + if (name_len > 0): | |
| 278 | + name = stream.read(name_len) | |
| 277 | 279 | # Consume 2 null bytes between name and tag. |
| 278 | - stream.read(2) | |
| 279 | - tag = stream.read(tag_len) | |
| 280 | + if ((tag_len > 0) or (control_tip_text_len > 0)): | |
| 281 | + stream.read(2) | |
| 282 | + # Sometimes it looks like 2 extra null bytes go here whether or not there is a tag. | |
| 283 | + tag = None | |
| 284 | + if (tag_len > 0): | |
| 285 | + tag = stream.read(tag_len) | |
| 280 | 286 | # Skip SitePosition. |
| 281 | - stream.read(6) | |
| 287 | + if propmask.fPosition: | |
| 288 | + stream.read(8) | |
| 282 | 289 | control_tip_text = stream.read(control_tip_text_len) |
| 283 | 290 | if (len(control_tip_text) == 0): |
| 284 | 291 | control_tip_text = None |
| ... | ... | @@ -467,7 +474,6 @@ def consume_ScrollBarControl(stream): |
| 467 | 474 | def extract_OleFormVariables(ole_file, stream_dir): |
| 468 | 475 | control = ExtendedStream.open(ole_file, '/'.join(stream_dir + ['f'])) |
| 469 | 476 | variables = list(consume_FormControl(control)) |
| 470 | - # print('/'.join(stream_dir + ['o'])) | |
| 471 | 477 | data = ExtendedStream.open(ole_file, '/'.join(stream_dir + ['o'])) |
| 472 | 478 | for var in variables: |
| 473 | 479 | # See FormEmbeddedActiveXControlCached for type definition: [MS-OFORMS] 2.4.5 | ... | ... |