@@ -593,54 +593,38 @@ bool DatabaseSync::ShouldIgnoreSQLiteError() {
593
593
std::optional<std::string> ValidateDatabasePath (Environment* env,
594
594
Local<Value> path,
595
595
const std::string& field_name) {
596
- auto has_null_bytes = [](const std::string& str) {
597
- return str.find (' \0 ' ) != std::string ::npos;
596
+ constexpr auto has_null_bytes = [](std::string_view str) {
597
+ return str.find (' \0 ' ) != std::string_view ::npos;
598
598
};
599
- std::string location;
600
599
if (path->IsString ()) {
601
- location = Utf8Value (env->isolate (), path.As <String>()). ToString ( );
602
- if (!has_null_bytes (location)) {
603
- return location;
600
+ Utf8Value location (env->isolate (), path.As <String>());
601
+ if (!has_null_bytes (location. ToStringView () )) {
602
+ return location. ToString () ;
604
603
}
605
- }
606
-
607
- if (path->IsUint8Array ()) {
604
+ } else if (path->IsUint8Array ()) {
608
605
Local<Uint8Array> buffer = path.As <Uint8Array>();
609
606
size_t byteOffset = buffer->ByteOffset ();
610
607
size_t byteLength = buffer->ByteLength ();
611
608
auto data =
612
609
static_cast <const uint8_t *>(buffer->Buffer ()->Data ()) + byteOffset;
613
- if (!(std::find (data, data + byteLength, 0 ) != data + byteLength)) {
614
- Local<Value> out;
615
- if (String::NewFromUtf8 (env->isolate (),
616
- reinterpret_cast <const char *>(data),
617
- NewStringType::kNormal ,
618
- static_cast <int >(byteLength))
619
- .ToLocal (&out)) {
620
- return Utf8Value (env->isolate (), out.As <String>()).ToString ();
621
- }
610
+ if (std::find (data, data + byteLength, 0 ) == data + byteLength) {
611
+ return std::string (reinterpret_cast <const char *>(data), byteLength);
622
612
}
623
- }
624
-
625
- // When is URL
626
- if (path->IsObject ()) {
627
- Local<Object> url = path.As <Object>();
613
+ } else if (path->IsObject ()) { // When is URL
614
+ auto url = path.As <Object>();
628
615
Local<Value> href;
629
- Local<Value> protocol;
630
616
if (url->Get (env->context (), env->href_string ()).ToLocal (&href) &&
631
- href->IsString () &&
632
- url->Get (env->context (), env->protocol_string ()).ToLocal (&protocol) &&
633
- protocol->IsString ()) {
634
- location = Utf8Value (env->isolate (), href.As <String>()).ToString ();
617
+ href->IsString ()) {
618
+ Utf8Value location_value (env->isolate (), href.As <String>());
619
+ auto location = location_value.ToStringView ();
635
620
if (!has_null_bytes (location)) {
636
- auto file_url = ada::parse (location);
637
- CHECK (file_url);
638
- if (file_url->type != ada::scheme::FILE) {
621
+ CHECK (ada::can_parse (location));
622
+ if (!location.starts_with (" file:" )) {
639
623
THROW_ERR_INVALID_URL_SCHEME (env->isolate ());
640
624
return std::nullopt;
641
625
}
642
626
643
- return location ;
627
+ return location_value. ToString () ;
644
628
}
645
629
}
646
630
}
0 commit comments