static VALUE fenix_coerce_to_path(VALUE obj) { VALUE tmp; ID to_path; rb_encoding *enc; int level = rb_safe_level(); if (insecure_obj_p(obj, level)) { rb_insecure_operation(); } CONST_ID(to_path, "to_path"); tmp = rb_check_funcall(obj, to_path, 0, 0); if (tmp == Qundef) tmp = obj; StringValue(tmp); tmp = file_path_convert(tmp); if (obj != tmp && insecure_obj_p(tmp, level)) { rb_insecure_operation(); } enc = rb_enc_get(tmp); if (!rb_enc_asciicompat(enc)) { tmp = rb_str_inspect(tmp); rb_raise(rb_eEncCompatError, "path name must be ASCII-compatible (%s): %s", rb_enc_name(enc), RSTRING_PTR(tmp)); } return rb_str_new4(tmp); }
void rb_check_safe_obj(VALUE x) { if (rb_safe_level() > 0 && OBJ_TAINTED(x)) { rb_insecure_operation(); } rb_secure(4); }