8000 Patch CVE-2013-4164 · github/ruby@e1c0c3f · GitHub
[go: up one dir, main page]

Skip to content

Commit e1c0c3f

Browse files
author
Charlie Somerville
committed
1 parent 750bdfb commit e1c0c3f

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

util.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,12 @@ extern void *MALLOC(size_t);
853853
#define MALLOC malloc
854854
#endif
855855

856+
#ifdef FREE
857+
extern void FREE(void*);
858+
#else
859+
#define FREE free
860+
#endif
861+
856862
#ifndef Omit_Private_Memory
857863
#ifndef PRIVATE_MEM
858864
#define PRIVATE_MEM 2304
@@ -1142,7 +1148,7 @@ Balloc(int k)
11421148
#endif
11431149

11441150
ACQUIRE_DTOA_LOCK(0);
1145-
if ((rv = freelist[k]) != 0) {
1151+
if (k <= Kmax && (rv = freelist[k]) != 0) {
11461152
freelist[k] = rv->next;
11471153
}
11481154
else {
@@ -1171,6 +1177,10 @@ static void
11711177
Bfree(Bigint *v)
11721178
{
11731179
if (v) {
1180+
if (v->k > Kmax) {
1181+
FREE(v);
1182+
return;
1183+
}
11741184
ACQUIRE_DTOA_LOCK(0);
11751185
v->next = freelist[v->k];
11761186
freelist[v->k] = v;
@@ -2231,6 +2241,7 @@ ruby_strtod(const char *s00, char **se)
22312241
for (; c >= '0' && c <= '9'; c = *++s) {
22322242
have_dig:
22332243
nz++;
2244+
if (nf > DBL_DIG * 2) continue;
22342245
if (c -= '0') {
22352246
nf += nz;
22362247
for (i = 1; i < nz; i++)

0 commit comments

Comments
 (0)
0