Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame^] | 1 | From 4170b98e0d5864ef4db1c5704a6e9428c3be9fb8 Mon Sep 17 00:00:00 2001 |
| 2 | From: Iryna Shcherbina <ishcherb@redhat.com> |
| 3 | Date: Thu, 24 Aug 2017 18:01:43 +0200 |
| 4 | Subject: [PATCH] BUG: fix infinite loop when creating np.pad on an empty array |
| 5 | |
| 6 | Upstream-Status: Backport [https://github.com/numpy/numpy/pull/9599/commits/6f9ea0abbd305d53f9017debab3a3a591fe0e249] |
| 7 | CVE: CVE-2017-12852 |
| 8 | Signed-off-by: Dengke Du <dengke.du@windriver.com> |
| 9 | --- |
| 10 | numpy/lib/arraypad.py | 3 +++ |
| 11 | numpy/lib/tests/test_arraypad.py | 4 ++++ |
| 12 | 2 files changed, 7 insertions(+) |
| 13 | |
| 14 | diff --git a/numpy/lib/arraypad.py b/numpy/lib/arraypad.py |
| 15 | index 2dad99c..294a689 100644 |
| 16 | --- a/numpy/lib/arraypad.py |
| 17 | +++ b/numpy/lib/arraypad.py |
| 18 | @@ -1406,6 +1406,9 @@ def pad(array, pad_width, mode, **kwargs): |
| 19 | newmat = _append_min(newmat, pad_after, chunk_after, axis) |
| 20 | |
| 21 | elif mode == 'reflect': |
| 22 | + if narray.size == 0: |
| 23 | + raise ValueError("There aren't any elements to reflect in `array`") |
| 24 | + |
| 25 | for axis, (pad_before, pad_after) in enumerate(pad_width): |
| 26 | # Recursive padding along any axis where `pad_amt` is too large |
| 27 | # for indexing tricks. We can only safely pad the original axis |
| 28 | diff --git a/numpy/lib/tests/test_arraypad.py b/numpy/lib/tests/test_arraypad.py |
| 29 | index 056aa45..0f71d32 100644 |
| 30 | --- a/numpy/lib/tests/test_arraypad.py |
| 31 | +++ b/numpy/lib/tests/test_arraypad.py |
| 32 | @@ -1014,6 +1014,10 @@ class ValueError1(TestCase): |
| 33 | assert_raises(ValueError, pad, arr, ((-2, 3), (3, 2)), |
| 34 | **kwargs) |
| 35 | |
| 36 | + def test_check_empty_array(self): |
| 37 | + assert_raises(ValueError, pad, [], 4, mode='reflect') |
| 38 | + assert_raises(ValueError, pad, np.ndarray(0), 4, mode='reflect') |
| 39 | + |
| 40 | |
| 41 | class ValueError2(TestCase): |
| 42 | def test_check_negative_pad_amount(self): |
| 43 | -- |
| 44 | 2.8.1 |
| 45 | |