diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c index 73e5f98..d601eee 100644 --- a/ext/syck/rubyext.c +++ b/ext/syck/rubyext.c @@ -84,7 +84,9 @@ struct parser_xtra { VALUE data; /* Borrowed this idea from marshal.c to fix [ruby-core:8067] problem */ VALUE proc; VALUE resolver; +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) int taint; +#endif }; struct emitter_xtra { @@ -100,21 +102,24 @@ VALUE rb_syck_compile(VALUE self, VALUE port) { SYMID oid; - int taint; char *ret; VALUE bc; bytestring_t *sav = NULL; void *data = NULL; SyckParser *parser = syck_new_parser(); - taint = syck_parser_assign_io(parser, &port); +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) + int taint = syck_parser_assign_io(parser, &port); +#else + syck_parser_assign_io(parser, &port); +#endif syck_parser_handler( parser, syck_yaml2byte_handler ); syck_parser_error_handler( parser, NULL ); syck_parser_implicit_typing( parser, 0 ); syck_parser_taguri_expansion( parser, 0 ); oid = syck_parse( parser ); if (!syck_lookup_sym( parser, oid, &data )) { - rb_raise(rb_eSyntaxError, "root node <%p> not found", (void *)oid); + rb_raise(rb_eSyntaxError, "root node <%p> not found", (void *)oid); } sav = data; @@ -126,7 +131,10 @@ rb_syck_compile(VALUE self, VALUE port) syck_free_parser( parser ); bc = rb_str_new2( ret ); + +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) if ( taint ) OBJ_TAINT( bc ); +#endif return bc; } @@ -172,7 +180,9 @@ syck_parser_assign_io(SyckParser *parser, VALUE *pport) int taint = Qtrue; VALUE tmp, port = *pport; if (!NIL_P(tmp = rb_check_string_type(port))) { +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) taint = OBJ_TAINTED(port); /* original taintedness */ +#endif port = tmp; syck_parser_str( parser, RSTRING_PTR(port), RSTRING_LEN(port), NULL ); } @@ -667,7 +677,9 @@ rb_syck_load_handler(SyckParser *p, SyckNode *n) obj = n->id; } +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) if ( bonus->taint) OBJ_TAINT( obj ); +#endif if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, obj); rb_hash_aset(bonus->data, INT2FIX(RHASH_SIZE(bonus->data)), obj); @@ -864,7 +876,11 @@ syck_parser_load(int argc, VALUE *argv, VALUE self) syck_set_model( self, input, model ); bonus = (struct parser_xtra *)parser->bonus; +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) bonus->taint = syck_parser_assign_io(parser, &port); +#else + syck_parser_assign_io(parser, &port); +#endif bonus->data = rb_hash_new(); bonus->resolver = rb_attr_get( self, s_resolver ); if ( NIL_P( proc ) ) bonus->proc = 0; @@ -891,7 +907,11 @@ syck_parser_load_documents(int argc, VALUE *argv, VALUE self) syck_set_model( self, input, model ); bonus = (struct parser_xtra *)parser->bonus; +#if defined(OBJ_TAINTED) && defined(OBJ_TAINT) bonus->taint = syck_parser_assign_io(parser, &port); +#else + syck_parser_assign_io(parser, &port); +#endif bonus->resolver = rb_attr_get( self, s_resolver ); bonus->proc = 0;