Skip to content

Commit fca9ae5

Browse files
committed
avoid signed overflow
1 parent 2d6c540 commit fca9ae5

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

ext/version_sorter/version_sorter.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <ruby.h>
1616

1717
#define min(a, b) ((a) < (b) ? (a) : (b))
18+
#define max(a, b) ((a) > (b) ? (a) : (b))
1819
typedef int compare_callback_t(const void *, const void *);
1920

2021
struct version_number {
@@ -56,7 +57,8 @@ compare_version_number(const struct version_number *a,
5657
int cmp = 0;
5758

5859
if (num_a) {
59-
cmp = (int)ca->number - (int)cb->number;
60+
int64_t cmp64 = (int64_t)ca->number - (int64_t)cb->number;
61+
cmp = (int)max(INT_MIN, min(INT_MAX, cmp64));
6062
} else {
6163
cmp = strchunk_cmp(
6264
a->original, &ca->string,

0 commit comments

Comments
 (0)