From 023c7e53fa672c105d99612fab54c0aa4b381eac Mon Sep 17 00:00:00 2001 From: Lamont Granquist Date: Fri, 13 Jun 2014 18:08:48 -0700 Subject: fix very long nums/strings/keys --- ext/ffi_yajl/ext/parser/parser.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'ext/ffi_yajl') diff --git a/ext/ffi_yajl/ext/parser/parser.c b/ext/ffi_yajl/ext/parser/parser.c index 837093a..1f88442 100644 --- a/ext/ffi_yajl/ext/parser/parser.c +++ b/ext/ffi_yajl/ext/parser/parser.c @@ -74,7 +74,7 @@ int double_callback(void *ctx, double doubleVal) { } int number_callback(void *ctx, const char *numberVal, size_t numberLen) { - char buf[numberLen+1]; + char *buf = (char *)malloc(numberLen+1); buf[numberLen] = 0; memcpy(buf, numberVal, numberLen); if (memchr(buf, '.', numberLen) || @@ -84,11 +84,12 @@ int number_callback(void *ctx, const char *numberVal, size_t numberLen) { } else { set_value(ctx, rb_cstr2inum(buf, 10)); } + free(buf); return 1; } int string_callback(void *ctx, const unsigned char *stringVal, size_t stringLen) { - char buf[stringLen+1]; + char *buf = (char *)malloc(stringLen+1); VALUE str; #ifdef HAVE_RUBY_ENCODING_H rb_encoding *default_internal_enc; @@ -105,6 +106,7 @@ int string_callback(void *ctx, const unsigned char *stringVal, size_t stringLen) } #endif set_value(ctx,str); + free(buf); return 1; } @@ -114,7 +116,7 @@ int start_map_callback(void *ctx) { } int map_key_callback(void *ctx, const unsigned char *stringVal, size_t stringLen) { - char buf[stringLen+1]; + char *buf = (char *)malloc(stringLen+1); VALUE str; #ifdef HAVE_RUBY_ENCODING_H rb_encoding *default_internal_enc; @@ -131,6 +133,7 @@ int map_key_callback(void *ctx, const unsigned char *stringVal, size_t stringLen } #endif set_key(ctx,str); + free(buf); return 1; } -- cgit v1.2.1