Message324797
Python 3.7 works with 2-byte elements, I managed to find the wrong section in the doc-linked docs.
4.5 Extensible data fields
--------------------------
4.5.1 In order to allow different programs and different types
of information to be stored in the 'extra' field in .ZIP
files, the following structure MUST be used for all
programs storing data in this field:
header1+data1 + header2+data2 . . .
Each header should consist of:
Header ID - 2 bytes
Data Size - 2 bytes
Note: all fields stored in Intel low-byte/high-byte order.
And the test showing it working.
----
import sys
import zipfile
print(sys.version)
fn = sys.argv[1]
print(fn)
options = {
'endianness': ('little', 'big'),
'header_element_bytes': (2, 4),
'additional_size': (0, 4, 4 + 4),
}
for endianness in options['endianness']:
for additional_size in options['additional_size']:
for header_element_bytes in options['header_element_bytes']:
print('\n\n --- trying endianness: {}, additional_size: {}, header_element_bytes: {}'.format(endianness, additional_size, header_element_bytes))
with zipfile.ZipFile(fn, 'w') as zf:
zi = zipfile.ZipInfo("0")
extra_data = b"hello, extra, and some more just to make it longer and such so yeah"
zi.extra = (
(42).to_bytes(header_element_bytes, endianness)
+ (len(extra_data) + additional_size).to_bytes(header_element_bytes, endianness)
+ extra_data
)
zf.writestr(zi, b"the real data")
try:
zipfile.ZipFile(fn)
except Exception as e:
print(e)
else:
print('success')
----
altendky@lt:~/twisted$ python3.7 ../z.py 37.py
3.7.0 (default, Jul 7 2018, 15:49:24)
[GCC 6.3.0 20170516]
37.py
--- trying endianness: little, additional_size: 0, header_element_bytes: 2
success
--- trying endianness: little, additional_size: 0, header_element_bytes: 4
Corrupt extra field 6568 (size=27756)
--- trying endianness: little, additional_size: 4, header_element_bytes: 2
Corrupt extra field 002a (size=71)
--- trying endianness: little, additional_size: 4, header_element_bytes: 4
Corrupt extra field 6568 (size=27756)
--- trying endianness: little, additional_size: 8, header_element_bytes: 2
Corrupt extra field 002a (size=75)
--- trying endianness: little, additional_size: 8, header_element_bytes: 4
Corrupt extra field 6568 (size=27756)
--- trying endianness: big, additional_size: 0, header_element_bytes: 2
Corrupt extra field 2a00 (size=17152)
--- trying endianness: big, additional_size: 0, header_element_bytes: 4
Corrupt extra field 0000 (size=10752)
--- trying endianness: big, additional_size: 4, header_element_bytes: 2
Corrupt extra field 2a00 (size=18176)
--- trying endianness: big, additional_size: 4, header_element_bytes: 4
Corrupt extra field 0000 (size=10752)
--- trying endianness: big, additional_size: 8, header_element_bytes: 2
Corrupt extra field 2a00 (size=19200)
--- trying endianness: big, additional_size: 8, header_element_bytes: 4
Corrupt extra field 0000 (size=10752) |
|
Date |
User |
Action |
Args |
2018-09-07 21:21:22 | altendky | set | recipients:
+ altendky, serhiy.storchaka, xtreak |
2018-09-07 21:21:22 | altendky | set | messageid: <1536355282.93.0.56676864532.issue34606@psf.upfronthosting.co.za> |
2018-09-07 21:21:22 | altendky | link | issue34606 messages |
2018-09-07 21:21:22 | altendky | create | |
|