diff options
Diffstat (limited to 'ext/cgi/escape')
-rw-r--r-- | ext/cgi/escape/depend | 3 | ||||
-rw-r--r-- | ext/cgi/escape/escape.c | 35 | ||||
-rw-r--r-- | ext/cgi/escape/extconf.rb | 6 |
3 files changed, 34 insertions, 10 deletions
diff --git a/ext/cgi/escape/depend b/ext/cgi/escape/depend index e3904d0695..37304a24f4 100644 --- a/ext/cgi/escape/depend +++ b/ext/cgi/escape/depend @@ -53,6 +53,7 @@ escape.o: $(hdrdir)/ruby/internal/attr/noexcept.h escape.o: $(hdrdir)/ruby/internal/attr/noinline.h escape.o: $(hdrdir)/ruby/internal/attr/nonnull.h escape.o: $(hdrdir)/ruby/internal/attr/noreturn.h +escape.o: $(hdrdir)/ruby/internal/attr/packed_struct.h escape.o: $(hdrdir)/ruby/internal/attr/pure.h escape.o: $(hdrdir)/ruby/internal/attr/restrict.h escape.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h @@ -121,7 +122,6 @@ escape.o: $(hdrdir)/ruby/internal/intern/enumerator.h escape.o: $(hdrdir)/ruby/internal/intern/error.h escape.o: $(hdrdir)/ruby/internal/intern/eval.h escape.o: $(hdrdir)/ruby/internal/intern/file.h -escape.o: $(hdrdir)/ruby/internal/intern/gc.h escape.o: $(hdrdir)/ruby/internal/intern/hash.h escape.o: $(hdrdir)/ruby/internal/intern/io.h escape.o: $(hdrdir)/ruby/internal/intern/load.h @@ -152,7 +152,6 @@ escape.o: $(hdrdir)/ruby/internal/memory.h escape.o: $(hdrdir)/ruby/internal/method.h escape.o: $(hdrdir)/ruby/internal/module.h escape.o: $(hdrdir)/ruby/internal/newobj.h -escape.o: $(hdrdir)/ruby/internal/rgengc.h escape.o: $(hdrdir)/ruby/internal/scan_args.h escape.o: $(hdrdir)/ruby/internal/special_consts.h escape.o: $(hdrdir)/ruby/internal/static_assert.h diff --git a/ext/cgi/escape/escape.c b/ext/cgi/escape/escape.c index c5b76de596..495ad83aa3 100644 --- a/ext/cgi/escape/escape.c +++ b/ext/cgi/escape/escape.c @@ -83,7 +83,7 @@ optimized_unescape_html(VALUE str) unsigned long charlimit = (strcasecmp(rb_enc_name(enc), "UTF-8") == 0 ? UNICODE_MAX : strcasecmp(rb_enc_name(enc), "ISO-8859-1") == 0 ? 256 : 128); - long i, len, beg = 0; + long i, j, len, beg = 0; size_t clen, plen; int overflow; const char *cstr; @@ -100,6 +100,7 @@ optimized_unescape_html(VALUE str) plen = i - beg; if (++i >= len) break; c = (unsigned char)cstr[i]; + j = i; #define MATCH(s) (len - i >= (int)rb_strlen_lit(s) && \ memcmp(&cstr[i], s, rb_strlen_lit(s)) == 0 && \ (i += rb_strlen_lit(s) - 1, 1)) @@ -112,28 +113,40 @@ optimized_unescape_html(VALUE str) else if (MATCH("mp;")) { c = '&'; } - else continue; + else { + i = j; + continue; + } break; case 'q': ++i; if (MATCH("uot;")) { c = '"'; } - else continue; + else { + i = j; + continue; + } break; case 'g': ++i; if (MATCH("t;")) { c = '>'; } - else continue; + else { + i = j; + continue; + } break; case 'l': ++i; if (MATCH("t;")) { c = '<'; } - else continue; + else { + i = j; + continue; + } break; case '#': if (len - ++i >= 2 && ISDIGIT(cstr[i])) { @@ -142,9 +155,15 @@ optimized_unescape_html(VALUE str) else if ((cstr[i] == 'x' || cstr[i] == 'X') && len - ++i >= 2 && ISXDIGIT(cstr[i])) { cc = ruby_scan_digits(&cstr[i], len-i, 16, &clen, &overflow); } - else continue; + else { + i = j; + continue; + } i += clen; - if (overflow || cc >= charlimit || cstr[i] != ';') continue; + if (overflow || cc >= charlimit || cstr[i] != ';') { + i = j; + continue; + } if (!dest) { dest = rb_str_buf_new(len); } @@ -458,7 +477,9 @@ InitVM_escape(void) rb_define_method(rb_mEscape, "escapeHTML", cgiesc_escape_html, 1); rb_define_method(rb_mEscape, "unescapeHTML", cgiesc_unescape_html, 1); rb_define_method(rb_mEscape, "escapeURIComponent", cgiesc_escape_uri_component, 1); + rb_define_alias(rb_mEscape, "escape_uri_component", "escapeURIComponent"); rb_define_method(rb_mEscape, "unescapeURIComponent", cgiesc_unescape_uri_component, -1); + rb_define_alias(rb_mEscape, "unescape_uri_component", "unescapeURIComponent"); rb_define_method(rb_mEscape, "escape", cgiesc_escape, 1); rb_define_method(rb_mEscape, "unescape", cgiesc_unescape, -1); rb_prepend_module(rb_mUtil, rb_mEscape); diff --git a/ext/cgi/escape/extconf.rb b/ext/cgi/escape/extconf.rb index 16e8ff224d..73acd89ca8 100644 --- a/ext/cgi/escape/extconf.rb +++ b/ext/cgi/escape/extconf.rb @@ -1,3 +1,7 @@ require 'mkmf' -create_makefile 'cgi/escape' +if RUBY_ENGINE == 'truffleruby' + File.write("Makefile", dummy_makefile($srcdir).join("")) +else + create_makefile 'cgi/escape' +end |