An interpreted, interactive, object-oriented programming language
CentOS Sources
2017-08-01 71084d584ff953f5463757ec6536406320560b4d
commit | author | age
f63228 1
CS 2 # HG changeset patch
3 # User Benjamin Peterson <benjamin@python.org>
4 # Date 1403579547 25200
5 # Node ID 8d963c7db507be561e26bbbb852e3a2be3327c3f
6 # Parent  8e0b7393e921fb5e05c40265f9272dec90512ef6
7 avoid overflow with large buffer sizes and/or offsets (closes #21831)
8
9 diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py
10 --- a/Lib/test/test_buffer.py
11 +++ b/Lib/test/test_buffer.py
12 @@ -4,6 +4,7 @@ For now, tests just new or changed funct
13  
14  """
15  
16 +import sys
17  import unittest
18  from test import test_support
19  
20 @@ -29,6 +30,11 @@ class BufferTests(unittest.TestCase):
21          m = memoryview(b) # Should not raise an exception
22          self.assertEqual(m.tobytes(), s)
23  
24 +    def test_large_buffer_size_and_offset(self):
25 +        data = bytearray('hola mundo')
26 +        buf = buffer(data, sys.maxsize, sys.maxsize)
27 +        self.assertEqual(buf[:4096], "")
28 +
29  
30  def test_main():
31      with test_support.check_py3k_warnings(("buffer.. not supported",
32 diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
33 --- a/Objects/bufferobject.c
34 +++ b/Objects/bufferobject.c
35 @@ -88,7 +88,7 @@ get_buf(PyBufferObject *self, void **ptr
36              *size = count;
37          else
38              *size = self->b_size;
39 -        if (offset + *size > count)
40 +        if (*size > count - offset)
41              *size = count - offset;
42      }
43      return 1;
44 @@ -875,4 +875,4 @@ PyTypeObject PyBuffer_Type = {
45      0,                                          /* tp_init */
46      0,                                          /* tp_alloc */
47      buffer_new,                                 /* tp_new */
48 -};
49 \ No newline at end of file
50 +};
51