[macruby-changes] [3018] MacRuby/trunk/ext/json/rubyext.c

source_changes at macosforge.org source_changes at macosforge.org
Mon Nov 16 14:30:37 PST 2009


Revision: 3018
          http://trac.macosforge.org/projects/ruby/changeset/3018
Author:   psychs at limechat.net
Date:     2009-11-16 14:30:36 -0800 (Mon, 16 Nov 2009)
Log Message:
-----------
fixed non ASCII string bugs in generator

Modified Paths:
--------------
    MacRuby/trunk/ext/json/rubyext.c

Modified: MacRuby/trunk/ext/json/rubyext.c
===================================================================
--- MacRuby/trunk/ext/json/rubyext.c	2009-11-16 22:21:18 UTC (rev 3017)
+++ MacRuby/trunk/ext/json/rubyext.c	2009-11-16 22:30:36 UTC (rev 3018)
@@ -131,7 +131,8 @@
     rb_json_parser_t* parser = RJSONParser(self);
     
     if (TYPE(input) == T_STRING) {
-        json_parse_chunk((const unsigned char*)RSTRING_PTR(input), RSTRING_LEN(input), parser->parser);
+        const unsigned char* cptr = (const unsigned char*)RSTRING_PTR(input);
+        json_parse_chunk(cptr, (unsigned int)strlen(cptr), parser->parser);
     }
     else {
         rb_raise(rb_cParseError, "input must be a string");
@@ -374,6 +375,7 @@
 {
     VALUE str, keys, entry, keyStr;
     yajl_gen_status status;
+    const unsigned char* cptr;
     int i, len;
     int quote_strings = 1;
     rb_json_generator_t* gen = RJSONGenerator(ctx);
@@ -411,13 +413,15 @@
         case T_FLOAT:
         case T_BIGNUM:
             str = rb_funcall(obj, id_to_s, 0);
-            if (!strcmp(RSTRING_PTR(str), "NaN") || !strcmp(RSTRING_PTR(str), "Infinity") || !strcmp(RSTRING_PTR(str), "-Infinity")) {
-                rb_raise(rb_cEncodeError, "'%s' is an invalid number", RSTRING_PTR(str));
+            cptr = (const unsigned char*)RSTRING_PTR(str);
+            if (!strcmp(cptr, "NaN") || !strcmp(cptr, "Infinity") || !strcmp(cptr, "-Infinity")) {
+                rb_raise(rb_cEncodeError, "'%s' is an invalid number", cptr);
             }
-            status = yajl_gen_number(gen->generator, RSTRING_PTR(str), (unsigned int)RSTRING_LEN(str));
+            status = yajl_gen_number(gen->generator, cptr, (unsigned int)strlen(cptr));
             break;
         case T_STRING:
-            status = yajl_gen_string(gen->generator, (const unsigned char*)RSTRING_PTR(obj), (unsigned int)RSTRING_LEN(obj), 1);
+            cptr = (const unsigned char*)RSTRING_PTR(obj);
+            status = yajl_gen_string(gen->generator, cptr, (unsigned int)strlen(cptr), 1);
             break;
         default:
             if (rb_respond_to(obj, id_to_json)) {
@@ -427,7 +431,8 @@
             else {
                 str = rb_funcall(obj, id_to_s, 0);
             }
-            status = yajl_gen_string(gen->generator, (const unsigned char*)RSTRING_PTR(str), (unsigned int)RSTRING_LEN(str), quote_strings);
+            cptr = (const unsigned char*)RSTRING_PTR(str);
+            status = yajl_gen_string(gen->generator, cptr, (unsigned int)strlen(cptr), quote_strings);
             break;
     }
 }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091116/77a6a6ea/attachment-0001.html>


More information about the macruby-changes mailing list