@@ -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,
@@ -680,7 +668,7 @@ MaybeLocal<Value> StringBytes::Encode(Isolate* isolate,
680668 static_cast <int >(r.count ));
681669 }
682670 } else if (simdutf::validate_utf8 (buf, buflen)) {
683- return EncodeKnownValidNonAsciiUTF8 (isolate, buf, buflen);
671+ return EncodeValidNonAsciiUtf8 (isolate, buf, buflen);
684672 }
685673 }
686674
@@ -784,4 +772,19 @@ MaybeLocal<Value> StringBytes::Encode(Isolate* isolate,
784772 return Encode (isolate, buf, len, encoding);
785773}
786774
775+ MaybeLocal<Value> StringBytes::EncodeValidUtf8 (Isolate* isolate,
776+ const char * buf,
777+ size_t buflen) {
778+ buflen = keep_buflen_in_range (buflen);
779+ if (!simdutf::validate_ascii_with_errors (buf, buflen).error ) {
780+ return ExternOneByteString::NewFromCopy (isolate, buf, buflen);
781+ }
782+ if (buflen >= 32 ) return EncodeValidNonAsciiUtf8 (isolate, buf, buflen);
783+ Local<String> str;
784+ if (!String::NewFromUtf8 (isolate, buf, v8::NewStringType::kNormal , buflen)
785+ .ToLocal (&str))
786+ isolate->ThrowException (node::ERR_STRING_TOO_LONG (isolate));
787+ return str;
788+ }
789+
787790} // namespace node
0 commit comments