[Python-checkins] bpo-31848: Fix broken error handling in Aifc_read.initfp() when the SSND chunk is not found (GH-5240)

Miss Islington (bot) webhook-mailer at python.org
Tue Feb 20 17:17:33 EST 2018


https://github.com/python/cpython/commit/2b9726eb647e856d83eafdc30cdbbc31a5920ab6
commit: 2b9726eb647e856d83eafdc30cdbbc31a5920ab6
branch: 3.6
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2018-02-20T14:17:30-08:00
summary:

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


Initialize self._ssnd_chunk so that aifc.Error is raised as intended,
not AttributeError.
(cherry picked from commit 80d20b918bd8a882043c493a7f958333ecb41727)

Co-authored-by: Zackery Spytz <zspytz at gmail.com>

files:
A Misc/NEWS.d/next/Library/2018-01-18-23-34-17.bpo-31848.M2cldy.rst
M Lib/aifc.py
M Lib/test/test_aifc.py
M Misc/ACKS

diff --git a/Lib/aifc.py b/Lib/aifc.py
index 13ad7dc5ca3d..9df6cd1d5e9c 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -322,6 +322,7 @@ def initfp(self, file):
         else:
             raise Error('not an AIFF or AIFF-C file')
         self._comm_chunk_read = 0
+        self._ssnd_chunk = None
         while 1:
             self._ssnd_seek_needed = 1
             try:
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index a731a5136ba5..9e8cd17be14b 100644
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -263,6 +263,14 @@ def test_read_no_comm_chunk(self):
         b = io.BytesIO(b'FORM' + struct.pack('>L', 4) + b'AIFF')
         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):
         b = b'FORM' + struct.pack('>L', 4) + b'AIFC'
         b += b'COMM' + struct.pack('>LhlhhLL', 23, 0, 0, 0, 0, 0, 0)
diff --git a/Misc/ACKS b/Misc/ACKS
index 0e64609df64e..2a7b1b8140a4 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1478,6 +1478,7 @@ Nicholas Spies
 Per Spilling
 Joshua Spoerri
 Noah Spurrier
+Zackery Spytz
 Nathan Srebro
 RajGopal Srinivasan
 Tage Stabell-Kulo
diff --git a/Misc/NEWS.d/next/Library/2018-01-18-23-34-17.bpo-31848.M2cldy.rst b/Misc/NEWS.d/next/Library/2018-01-18-23-34-17.bpo-31848.M2cldy.rst
new file mode 100644
index 000000000000..c8e61acb0b06
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-01-18-23-34-17.bpo-31848.M2cldy.rst
@@ -0,0 +1,2 @@
+Fix the error handling in Aifc_read.initfp() when the SSND chunk is not found.
+Patch by Zackery Spytz.



More information about the Python-checkins mailing list