From cdbd7d8645892b07402745a6e270cd09fd3e5894 Mon Sep 17 00:00:00 2001 From: Charlie Clark Date: Sat, 27 Jun 2015 17:05:56 +0200 Subject: [PATCH] Ignore dimensions if they cannot be parsed. Resolves #484 --- doc/source/changes.rst | 1 + .../data/reader/sheet2_invalid_dimension.xml | 341 ++++++++++++++++++ openpyxl/tests/test_iter.py | 1 + openpyxl/worksheet/iter_worksheet.py | 2 + 4 files changed, 345 insertions(+) create mode 100644 openpyxl/tests/data/reader/sheet2_invalid_dimension.xml diff --git a/doc/source/changes.rst b/doc/source/changes.rst index 82e7f8b6..7565fecd 100644 --- a/doc/source/changes.rst +++ b/doc/source/changes.rst @@ -6,6 +6,7 @@ Bug fixes --------- * `#463 `_ Unexpected keyword "mergeCell" +* `#484 `_ Unusual dimensions breaks read-only mode 2.2.4 (2015-06-17) diff --git a/openpyxl/tests/data/reader/sheet2_invalid_dimension.xml b/openpyxl/tests/data/reader/sheet2_invalid_dimension.xml new file mode 100644 index 00000000..90f7a934 --- /dev/null +++ b/openpyxl/tests/data/reader/sheet2_invalid_dimension.xml @@ -0,0 +1,341 @@ + + + + + + + + 1 + + + 0.01 + + + 100 + + + + + 2 + + + 0.02 + + + 101 + + + + + 3 + + + 0.03 + + + 102 + + + + + 4 + + + 0.04 + + + 103 + + + + + 5 + + + 0 + + + 0.05 + + + 104 + + + + + 6 + + + 0.06 + + + 105 + + + + + 7 + + + 7.0000000000000007E-2 + + + 106 + + + + + 8 + + + 0.08 + + + 107 + + + + + 9 + + + 0.09 + + + 108 + + + + + 10 + + + 0.1 + + + 109 + + + + + 11 + + + 0.11 + + + 110 + + + + + 12 + + + 0.12 + + + 111 + + + + + 13 + + + 0.13 + + + 112 + + + + + 14 + + + 0.14000000000000001 + + + 113 + + + + + 15 + + + 0.15 + + + 114 + + + + + 16 + + + 0.16 + + + 115 + + + + + 17 + + + 0.17 + + + 116 + + + + + 18 + + + 0.18 + + + 117 + + + + + 19 + + + 0.19 + + + 118 + + + + + 20 + + + 0.2 + + + 119 + + + + + 21 + + + 0.21 + + + 120 + + + + + 22 + + + 0.22 + + + 121 + + + + + 23 + + + 0.23 + + + 122 + + + + + 24 + + + 0.24 + + + 123 + + + + + 25 + + + 0.25 + + + 124 + + + + + 26 + + + 0.26 + + + 125 + + + + + 27 + + + 0.27 + + + 126 + + + + + 28 + + + 0.28000000000000003 + + + 127 + + + + + 29 + + + 0.28999999999999998 + + + 128 + + + + + 30 + + + 0.3 + + + 129 + + + + + diff --git a/openpyxl/tests/test_iter.py b/openpyxl/tests/test_iter.py index cf82a029..2f91b54f 100644 --- a/openpyxl/tests/test_iter.py +++ b/openpyxl/tests/test_iter.py @@ -34,6 +34,7 @@ def test_open_many_sheets(datadir): ("sheet2.xml", ('D', 1, 'AA', 30)), ("sheet2_no_dimension.xml", None), ("sheet2_no_span.xml", None), + ("sheet2_invalid_dimension.xml", None), ] ) def test_read_dimension(datadir, filename, expected): diff --git a/openpyxl/worksheet/iter_worksheet.py b/openpyxl/worksheet/iter_worksheet.py index 51efe523..abb20aed 100644 --- a/openpyxl/worksheet/iter_worksheet.py +++ b/openpyxl/worksheet/iter_worksheet.py @@ -34,6 +34,8 @@ def read_dimension(source): if element.tag == DIMENSION_TAG: dim = element.get("ref") m = ABSOLUTE_RE.match(dim.upper()) + if m is None: + return min_col, min_row, sep, max_col, max_row = m.groups() min_row = int(min_row) if max_col is None or max_row is None: