[ruby/erb] Use strpbrk only when str is long enough for SIMD
This is the same trick used by https://github.com/k0kubun/hescape to choose the best strategy for different scenarios. https://github.com/ruby/erb/commit/af26da2858
This commit is contained in:
parent
419d2fc14d
commit
e8873e01b6
@ -38,9 +38,8 @@ escaped_length(VALUE str)
|
||||
static VALUE
|
||||
optimized_escape_html(VALUE str)
|
||||
{
|
||||
// Optimize the most common, no-escape case with strpbrk(3). Not using it after
|
||||
// this because calling a C function many times could be slower for some cases.
|
||||
if (strpbrk(RSTRING_PTR(str), "'&\"<>") == NULL) {
|
||||
// Use strpbrk to optimize the no-escape case when str is long enough for SIMD.
|
||||
if (RSTRING_LEN(str) >= 16 && strpbrk(RSTRING_PTR(str), "'&\"<>") == NULL) {
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -62,8 +61,11 @@ optimized_escape_html(VALUE str)
|
||||
}
|
||||
}
|
||||
|
||||
VALUE escaped = rb_str_new(buf, dest - buf);
|
||||
preserve_original_state(str, escaped);
|
||||
VALUE escaped = str;
|
||||
if (RSTRING_LEN(str) < (dest - buf)) {
|
||||
escaped = rb_str_new(buf, dest - buf);
|
||||
preserve_original_state(str, escaped);
|
||||
}
|
||||
ALLOCV_END(vbuf);
|
||||
return escaped;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user