Commit 80d20b91 authored by Zackery Spytz's avatar Zackery Spytz Committed by Serhiy Storchaka

bpo-31848: Fix broken error handling in Aifc_read.initfp() when the SSND chunk is not found (#5240)

Initialize self._ssnd_chunk so that aifc.Error is raised as intended,
not AttributeError.
parent 7a1e1786
...@@ -322,6 +322,7 @@ class Aifc_read: ...@@ -322,6 +322,7 @@ class Aifc_read:
else: else:
raise Error('not an AIFF or AIFF-C file') raise Error('not an AIFF or AIFF-C file')
self._comm_chunk_read = 0 self._comm_chunk_read = 0
self._ssnd_chunk = None
while 1: while 1:
self._ssnd_seek_needed = 1 self._ssnd_seek_needed = 1
try: try:
......
...@@ -266,6 +266,14 @@ class AIFCLowLevelTest(unittest.TestCase): ...@@ -266,6 +266,14 @@ class AIFCLowLevelTest(unittest.TestCase):
b = io.BytesIO(b'FORM' + struct.pack('>L', 4) + b'AIFF') b = io.BytesIO(b'FORM' + struct.pack('>L', 4) + b'AIFF')
self.assertRaises(aifc.Error, aifc.open, b) self.assertRaises(aifc.Error, aifc.open, b)
def test_read_no_ssnd_chunk(self):
b = b'FORM' + struct.pack('>L', 4) + b'AIFC'
b += b'COMM' + struct.pack('>LhlhhLL', 38, 0, 0, 0, 0, 0, 0)
b += b'NONE' + struct.pack('B', 14) + b'not compressed' + b'\x00'
with self.assertRaisesRegex(aifc.Error, 'COMM chunk and/or SSND chunk'
' missing'):
aifc.open(io.BytesIO(b))
def test_read_wrong_compression_type(self): def test_read_wrong_compression_type(self):
b = b'FORM' + struct.pack('>L', 4) + b'AIFC' b = b'FORM' + struct.pack('>L', 4) + b'AIFC'
b += b'COMM' + struct.pack('>LhlhhLL', 23, 0, 0, 0, 0, 0, 0) b += b'COMM' + struct.pack('>LhlhhLL', 23, 0, 0, 0, 0, 0, 0)
......
...@@ -1512,6 +1512,7 @@ Nicholas Spies ...@@ -1512,6 +1512,7 @@ Nicholas Spies
Per Spilling Per Spilling
Joshua Spoerri Joshua Spoerri
Noah Spurrier Noah Spurrier
Zackery Spytz
Nathan Srebro Nathan Srebro
RajGopal Srinivasan RajGopal Srinivasan
Tage Stabell-Kulo Tage Stabell-Kulo
......
Fix the error handling in Aifc_read.initfp() when the SSND chunk is not found.
Patch by Zackery Spytz.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment