Skip to content

Commit d8e082d

Browse files
committed
BUG: check array lengths in vec_compare/vec_binop in Cython, close #1016
1 parent d196363 commit d8e082d

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

pandas/src/tseries.pyx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,10 @@ def vec_compare(ndarray[object] left, ndarray[object] right, object op):
549549
ndarray[uint8_t, cast=True] result
550550
int flag
551551

552+
if n != len(right):
553+
raise ValueError('Arrays were different lengths: %d vs %d'
554+
% (n, len(right)))
555+
552556
if op is operator.lt:
553557
flag = cpython.Py_LT
554558
elif op is operator.le:
@@ -612,6 +616,11 @@ def scalar_binop(ndarray[object] values, object val, object op):
612616
def vec_binop(ndarray[object] left, ndarray[object] right, object op):
613617
cdef:
614618
Py_ssize_t i, n = len(left)
619+
ndarray[object] result
620+
621+
if n != len(right):
622+
raise ValueError('Arrays were different lengths: %d vs %d'
623+
% (n, len(right)))
615624

616625
result = np.empty(n, dtype=object)
617626

pandas/tests/test_series.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,6 +1252,11 @@ def test_more_na_comparisons(self):
12521252
expected = Series([True, True, True])
12531253
assert_series_equal(result, expected)
12541254

1255+
def test_comparison_different_length(self):
1256+
a = Series(['a', 'b', 'c'])
1257+
b = Series(['b', 'a'])
1258+
self.assertRaises(ValueError, a.__lt__, b)
1259+
12551260
def test_between(self):
12561261
from pandas import DateRange
12571262

0 commit comments

Comments
 (0)