Skip to content

Commit cc2adbc

Browse files
committed
#10198: fix duplicate header when writeframes() is called with an empty string.
1 parent dd42154 commit cc2adbc

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

Lib/wave.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ def initfp(self, file):
319319
self._nframeswritten = 0
320320
self._datawritten = 0
321321
self._datalength = 0
322+
self._headerwritten = False
322323

323324
def __del__(self):
324325
self.close()
@@ -449,7 +450,7 @@ def close(self):
449450
#
450451

451452
def _ensure_header_written(self, datasize):
452-
if not self._datawritten:
453+
if not self._headerwritten:
453454
if not self._nchannels:
454455
raise Error('# channels not specified')
455456
if not self._sampwidth:
@@ -459,6 +460,7 @@ def _ensure_header_written(self, datasize):
459460
self._write_header(datasize)
460461

461462
def _write_header(self, initlength):
463+
assert not self._headerwritten
462464
self._file.write(b'RIFF')
463465
if not self._nframes:
464466
self._nframes = initlength // (self._nchannels * self._sampwidth)
@@ -472,8 +474,10 @@ def _write_header(self, initlength):
472474
self._sampwidth * 8, 'data'))
473475
self._data_length_pos = self._file.tell()
474476
self._file.write(struct.pack('<l', self._datalength))
477+
self._headerwritten = True
475478

476479
def _patchheader(self):
480+
assert self._headerwritten
477481
if self._datawritten == self._datalength:
478482
return
479483
curpos = self._file.tell()

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ Core and Builtins
5757
Library
5858
-------
5959

60+
- Issue #10198: fix duplicate header written to wave files when writeframes()
61+
is called without data.
62+
6063
- Close file objects in modulefinder in a timely manner.
6164

6265
- Close a io.TextIOWrapper object in email.parser in a timely manner.

0 commit comments

Comments
 (0)