summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--array.c7
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f7969ae0f2..3067865ea9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Feb 4 13:55:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_reverse): SEGV on empty array reverse.
+
Tue Feb 3 12:24:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
* re.c (match_to_a): non matching element should be nil.
diff --git a/array.c b/array.c
index a0e1e000d1..6a6dce4697 100644
--- a/array.c
+++ b/array.c
@@ -410,7 +410,7 @@ ary_indexes(ary, args)
VALUE new_ary;
int i = 0;
- if (!args || NIL_P(args)) {
+ if (!args || NIL_P(args) || RARRAY(args)->len == 0) {
return ary_new2(0);
}
@@ -683,6 +683,8 @@ ary_reverse(ary)
VALUE *p1, *p2;
VALUE tmp;
+ if (RARRAY(ary)->len == 0) return ary;
+
p1 = RARRAY(ary)->ptr;
p2 = p1 + RARRAY(ary)->len - 1; /* points last item */
@@ -734,6 +736,8 @@ VALUE
ary_sort_bang(ary)
VALUE ary;
{
+ if (RARRAY(ary)->len == 0) return ary;
+
ary_modify(ary);
qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE), iterator_p()?sort_1:sort_2);
return ary;
@@ -743,6 +747,7 @@ VALUE
ary_sort(ary)
VALUE ary;
{
+ if (RARRAY(ary)->len == 0) return ary;
return ary_sort_bang(ary_clone(ary));
}