@@ -539,9 +539,9 @@ Maybe<size_t> StringBytes::Size(Isolate* isolate,
539539
540540// Converts known-valid UTF-8 (buflen >= 32) to a V8 string via the fast
541541// UTF-16 path. Callers must ensure buflen is range-checked.
542- static MaybeLocal<Value> EncodeKnownValidNonAsciiUTF8 (Isolate* isolate,
543- const char * buf,
544- size_t buflen) {
542+ static MaybeLocal<Value> EncodeValidNonAsciiUtf8 (Isolate* isolate,
543+ const char * buf,
544+ size_t buflen) {
545545 size_t u16size = simdutf::utf16_length_from_utf8 (buf, buflen);
546546 if (u16size > static_cast <size_t >(v8::String::kMaxLength )) {
547547 isolate->ThrowException (ERR_STRING_TOO_LONG (isolate));
@@ -555,18 +555,6 @@ static MaybeLocal<Value> EncodeKnownValidNonAsciiUTF8(Isolate* isolate,
555555 });
556556}
557557
558- MaybeLocal<Value> StringBytes::EncodeKnownValidUTF8 (Isolate* isolate,
559- const char * buf,
560- size_t buflen) {
561- buflen = keep_buflen_in_range (buflen);
562- if (buflen >= 32 ) return EncodeKnownValidNonAsciiUTF8 (isolate, buf, buflen);
563- Local<String> str;
564- if (!String::NewFromUtf8 (isolate, buf, v8::NewStringType::kNormal , buflen)
565- .ToLocal (&str))
566- isolate->ThrowException (node::ERR_STRING_TOO_LONG (isolate));
567- return str;
568- }
569-
570558MaybeLocal<Value> StringBytes::Encode (Isolate* isolate,
571559 const char * buf,
572560 size_t buflen,
@@ -616,7 +604,7 @@ MaybeLocal<Value> StringBytes::Encode(Isolate* isolate,
616604 // We know that we are non-ASCII (and are unlikely Latin1), use 2-byte
617605 // In the most likely case of valid UTF-8, we can use this fast impl
618606 // For very short input, it is slower, so we limit min size
619- return EncodeKnownValidNonAsciiUTF8 (isolate, buf, buflen);
607+ return EncodeValidNonAsciiUtf8 (isolate, buf, buflen);
620608 }
621609
622610 val =
@@ -719,4 +707,19 @@ MaybeLocal<Value> StringBytes::Encode(Isolate* isolate,
719707 return Encode (isolate, buf, len, encoding);
720708}
721709
710+ MaybeLocal<Value> StringBytes::EncodeValidUtf8 (Isolate* isolate,
711+ const char * buf,
712+ size_t buflen) {
713+ buflen = keep_buflen_in_range (buflen);
714+ if (!simdutf::validate_ascii_with_errors (buf, buflen).error ) {
715+ return ExternOneByteString::NewFromCopy (isolate, buf, buflen);
716+ }
717+ if (buflen >= 32 ) return EncodeValidNonAsciiUtf8 (isolate, buf, buflen);
718+ Local<String> str;
719+ if (!String::NewFromUtf8 (isolate, buf, v8::NewStringType::kNormal , buflen)
720+ .ToLocal (&str))
721+ isolate->ThrowException (node::ERR_STRING_TOO_LONG (isolate));
722+ return str;
723+ }
724+
722725} // namespace node
0 commit comments