Skip to content

Commit

Permalink
Merge pull request #295 from vadmium/buffer
Browse files Browse the repository at this point in the history
Fix memory overwriting issue caused by buffer rework
  • Loading branch information
chrippa committed Feb 14, 2014
2 parents 4fd238d + aa75639 commit 8cacad5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
4 changes: 1 addition & 3 deletions src/livestreamer/buffers.py
Expand Up @@ -50,9 +50,7 @@ def _iterate_chunks(self, size):

def write(self, data):
if not self.closed:
if isinstance(data, bytearray):
data = bytes(data)

data = bytes(data) # Copy so that original buffer may be reused
self.chunks.append(data)
self.length += len(data)

Expand Down
19 changes: 19 additions & 0 deletions tests/test_buffer.py
Expand Up @@ -46,6 +46,25 @@ def test_close(self):
self.buffer.close()
self.buffer.write(b"2" * 8192)
self.assertEqual(self.buffer.length, 8192)

def test_reuse_input(self):
"""Objects should be reusable after write()"""

original = b"original"
tests = [bytearray(original)]
try:
m = memoryview(bytearray(original))
except NameError: # Python 2.6 does not have "memoryview"
pass
else:
# Python 2.7 doesn't do bytes(memoryview) properly
if bytes(m) == original:
tests.append(m)

for data in tests:
self.buffer.write(data)
data[:] = b"reused!!"
self.assertEqual(self.buffer.read(), original)


if __name__ == "__main__":
Expand Down

0 comments on commit 8cacad5

Please sign in to comment.