Skip to content

Commit 3103dd1

Browse files
author
Ashe Connor
authored
Merge pull request #15 from philipturnbull/fuzzing
Fix two bugs found by fuzzing
2 parents fca9ae5 + 6b53dfb commit 3103dd1

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

ext/version_sorter/version_sorter.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ compare_version_number(const struct version_number *a,
5858

5959
if (num_a) {
6060
int64_t cmp64 = (int64_t)ca->number - (int64_t)cb->number;
61-
cmp = (int)max(INT_MIN, min(INT_MAX, cmp64));
61+
cmp = (int)max(-1, min(1, cmp64));
6262
} else {
6363
cmp = strchunk_cmp(
6464
a->original, &ca->string,
@@ -239,7 +239,13 @@ rb_version_compare(VALUE rb_self, VALUE rb_version_a, VALUE rb_version_b)
239239
{
240240
struct version_number *version_a = parse_version_number(StringValueCStr(rb_version_a));
241241
struct version_number *version_b = parse_version_number(StringValueCStr(rb_version_b));
242-
return INT2NUM(version_compare_cb(&version_a, &version_b));
242+
243+
VALUE result = INT2NUM(version_compare_cb(&version_a, &version_b));
244+
245+
xfree(version_a);
246+
xfree(version_b);
247+
248+
return result;
243249
}
244250

245251
void Init_version_sorter(void)

test/version_sorter_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ def test_compare
101101
assert_equal 0, VersionSorter.compare("12.0", "12.0")
102102
end
103103

104+
def test_int_negate
105+
a = ["0", "2147483648"]
106+
assert_equal a, VersionSorter.sort(a)
107+
assert_equal a.reverse, VersionSorter.rsort(a)
108+
end
109+
104110
def shuffle(array)
105111
array, result = array.dup, []
106112
result << array.delete_at(rand(array.size)) until array.size.zero?

0 commit comments

Comments
 (0)