-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
bpo-29110: Fix file object leak in aifc.open
.
#162
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
from test.support import findfile, TESTFN, unlink | ||
from test.support import check_no_resource_warning, findfile, TESTFN, unlink | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please wrap at 79 columns There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It seems to be 77 characters over here. Is there something I'm missing? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Uh, I'm sorry. no problem. |
||
import unittest | ||
from test import audiotests | ||
from audioop import byteswap | ||
|
@@ -149,6 +149,14 @@ def test_skipunknown(self): | |
#This file contains chunk types aifc doesn't recognize. | ||
self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif')) | ||
|
||
def test_close_opened_files_on_error(self): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The test tests only Aifc_read. Needed a test for Aifc_write. Is it possible to make tests common for aifc, sunau and wave? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. #293 adds test for Aifc_write. Since this type of test is depending on implementation (raise Exception on Edge case), |
||
non_aifc_file = findfile('pluck-pcm8.wav', subdir='audiodata') | ||
with check_no_resource_warning(self): | ||
with self.assertRaises(aifc.Error): | ||
# Try opening a non-AIFC file, with the expectation that | ||
# `aifc.open` will fail (without raising a ResourceWarning) | ||
f = self.f = aifc.open(non_aifc_file, 'rb') | ||
|
||
def test_params_added(self): | ||
f = self.f = aifc.open(TESTFN, 'wb') | ||
f.aiff() | ||
|
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 is unrelated change and it introduces a regression. self._aifc is not defined if the file have non .aiff extension.
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.
self.initfp(file_object)
initializesself._aifc = 1
.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.
Ah, sorry, I missed this. It would be better to write just
self._aifc = not f.endswith('.aiff')
if you want to modernize this code.But now it looks to me that
initfp()
never fails. All changes ofAifc_write
were not needed.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.
MemoryError and MaxRecursionError can happen, but that's very unlikely and hard to test.
That's why I didn't request testing Aifc_write.