Skip to content

Commit

Permalink
Fix missing empty-sequence checks
Browse files Browse the repository at this point in the history
  • Loading branch information
GrieferAtWork committed Nov 24, 2023
1 parent 2b595a9 commit 950e0f0
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 17 deletions.
96 changes: 81 additions & 15 deletions src/deemon/objects/seq.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,11 @@ seq_getrange(DeeObject *self, DeeObject *start, DeeObject *end) {
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
}
return DeeSeq_GetRangeN(self, (size_t)i_begin);
Expand All @@ -193,18 +196,26 @@ seq_getrange(DeeObject *self, DeeObject *start, DeeObject *end) {
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
if (i_end < 0) {
i_end += seq_len;
if unlikely(i_end < 0)
if unlikely(i_end < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_end = (dssize_t)do_fix_negative_range_index(i_end, seq_len);
}
}
}
return DeeSeq_GetRange(self,
(size_t)i_begin,
(size_t)i_end);
empty_range:
return_empty_seq;
err:
return NULL;
}
Expand All @@ -218,18 +229,26 @@ seq_nsi_getrange(DeeObject *__restrict self, dssize_t i_begin, dssize_t i_end) {
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
if (i_end < 0) {
i_end += seq_len;
if unlikely(i_end < 0)
if unlikely(i_end < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_end = (dssize_t)do_fix_negative_range_index(i_end, seq_len);
}
}
}
return DeeSeq_GetRange(self,
(size_t)i_begin,
(size_t)i_end);
empty_range:
return_empty_seq;
err:
return NULL;
}
Expand All @@ -243,11 +262,16 @@ seq_nsi_getrange_n(DeeObject *__restrict self, dssize_t i_begin) {
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
}
return DeeSeq_GetRangeN(self, (size_t)i_begin);
empty_range:
return_empty_seq;
err:
return NULL;
}
Expand Down Expand Up @@ -699,18 +723,26 @@ seq_nsi_delrange(DeeObject *self, dssize_t i_begin, dssize_t i_end) {
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
if (i_end < 0) {
i_end += seq_len;
if unlikely(i_end < 0)
if unlikely(i_end < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_end = (dssize_t)do_fix_negative_range_index(i_end, seq_len);
}
}
}
return DeeSeq_DelRange(self,
(size_t)i_begin,
(size_t)i_end);
empty_range:
return 0;
err:
return -1;
}
Expand All @@ -724,19 +756,30 @@ seq_nsi_setrange(DeeObject *self, dssize_t i_begin, dssize_t i_end,
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
if (i_end < 0) {
i_end += seq_len;
if unlikely(i_end < 0)
if unlikely(i_end < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_end = (dssize_t)do_fix_negative_range_index(i_end, seq_len);
}
}
}
do_setrange:
return DeeSeq_SetRange(self,
(size_t)i_begin,
(size_t)i_end,
values);
empty_range:
i_begin = 0;
i_end = 0;
goto do_setrange;
err:
return -1;
}
Expand All @@ -748,10 +791,15 @@ seq_nsi_delrange_n(DeeObject *self, dssize_t i_begin) {
if unlikely(seq_len == (size_t)-1)
goto err;
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
return DeeSeq_DelRangeN(self, (size_t)i_begin);
empty_range:
return 0;
err:
return -1;
}
Expand All @@ -764,10 +812,17 @@ seq_nsi_setrange_n(DeeObject *self, dssize_t i_begin,
if unlikely(seq_len == (size_t)-1)
goto err;
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
do_setrange:
return DeeSeq_SetRangeN(self, (size_t)i_begin, values);
empty_range:
i_begin = 0;
goto do_setrange;
err:
return -1;
}
Expand All @@ -783,8 +838,11 @@ seq_delrange(DeeObject *self, DeeObject *start, DeeObject *end) {
if unlikely(seq_len == (size_t)-1)
goto err;
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
return DeeSeq_DelRangeN(self, (size_t)i_begin);
}
Expand All @@ -796,18 +854,26 @@ seq_delrange(DeeObject *self, DeeObject *start, DeeObject *end) {
goto err;
if (i_begin < 0) {
i_begin += seq_len;
if unlikely(i_begin < 0)
if unlikely(i_begin < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_begin = (dssize_t)do_fix_negative_range_index(i_begin, seq_len);
}
}
if (i_end < 0) {
i_end += seq_len;
if unlikely(i_end < 0)
if unlikely(i_end < 0) {
if unlikely(seq_len == 0)
goto empty_range;
i_end = (dssize_t)do_fix_negative_range_index(i_end, seq_len);
}
}
}
return DeeSeq_DelRange(self,
(size_t)i_begin,
(size_t)i_end);
empty_range:
return 0;
err:
return -1;
}
Expand Down
4 changes: 2 additions & 2 deletions util/test-errors.dee
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,8 @@ function main() {
//invokeTypeMembers(deemon.Bytes);
//invokeTypeMembers(deemon.int);
//invokeTypeMembers(deemon.List);
invokeTypeMembers(deemon.Tuple);
//invokeTypeMembers(deemon.Sequence);
//invokeTypeMembers(deemon.Tuple);
invokeTypeMembers(deemon.Sequence);
//invokeTypeMembers(deemon.Object);
//invokeTypeMembers(deemon.bool);
//invokeTypeMembers(type(none));
Expand Down

0 comments on commit 950e0f0

Please sign in to comment.