diff --git a/ChangeLog b/ChangeLog index 5479e5c138..ae2fd73bae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Jan 29 13:00:17 2014 Nobuyoshi Nakada + + * util.c (ruby_qsort): fix potential stack overflow on a large + machine. based on the patch by Conrad Irwin at [ruby-core:51816]. [Bug #7772] + Wed Jan 29 12:54:13 2014 Nobuyoshi Nakada * parse.y (local_push_gen, local_pop_gen): save cmdarg_stack to diff --git a/util.c b/util.c index ded3840804..2b8209d9da 100644 --- a/util.c +++ b/util.c @@ -278,7 +278,9 @@ ruby_qsort(void* base, const size_t nel, const size_t size, char *L = base; /* left end of current region */ char *R = (char*)base + size*(nel-1); /* right end of current region */ size_t chklim = 63; /* threshold of ordering element check */ - stack_node stack[32], *top = stack; /* 32 is enough for 32bit CPU */ + enum {size_bits = sizeof(size) * CHAR_BIT}; + stack_node stack[size_bits]; /* enough for size_t size */ + stack_node *top = stack; int mmkind; size_t high, low, n; diff --git a/version.h b/version.h index 88a8ec2ae5..68cee5b4ea 100644 --- a/version.h +++ b/version.h @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 492 +#define RUBY_PATCHLEVEL 493 #define RUBY_RELEASE_DATE "2014-01-29" #define RUBY_RELEASE_YEAR 2014