| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1286,19 +1286,31 @@ static void Atob(const FunctionCallbackInfo<Value>& args) { | |||
| 1286 | 1286 | auto ext = input->GetExternalOneByteStringResource(); | |
| 1287 | 1287 | size_t expected_length = | |
| 1288 | 1288 | simdutf::maximal_binary_length_from_base64(ext->data(), ext->length()); | |
| 1289 | - buffer.AllocateSufficientStorage(expected_length + 1); | ||
| 1290 | - buffer.SetLengthAndZeroTerminate(expected_length); | ||
| 1289 | + buffer.AllocateSufficientStorage(expected_length); | ||
| 1290 | + buffer.SetLength(expected_length); | ||
| 1291 | 1291 | result = simdutf::base64_to_binary( | |
| 1292 | 1292 | ext->data(), ext->length(), buffer.out(), simdutf::base64_default); | |
| 1293 | + } else if (input->IsOneByte()) { | ||
| 1294 | + MaybeStackBuffer<uint8_t> stack_buf(input->Length()); | ||
| 1295 | + input->WriteOneByte(args.GetIsolate(), | ||
| 1296 | + stack_buf.out(), | ||
| 1297 | + 0, | ||
| 1298 | + input->Length(), | ||
| 1299 | + String::NO_NULL_TERMINATION); | ||
| 1300 | + const char* data = reinterpret_cast<const char*>(*stack_buf); | ||
| 1301 | + size_t expected_length = | ||
| 1302 | + simdutf::maximal_binary_length_from_base64(data, input->Length()); | ||
| 1303 | + buffer.AllocateSufficientStorage(expected_length); | ||
| 1304 | + buffer.SetLength(expected_length); | ||
| 1305 | + result = simdutf::base64_to_binary(data, input->Length(), buffer.out()); | ||
| 1293 | 1306 | } else { // 16-bit case | |
| 1294 | 1307 | String::Value value(env->isolate(), input); | |
| 1295 | 1308 | auto data = reinterpret_cast<const char16_t*>(*value); | |
| 1296 | 1309 | size_t expected_length = | |
| 1297 | 1310 | simdutf::maximal_binary_length_from_base64(data, value.length()); | |
| 1298 | - buffer.AllocateSufficientStorage(expected_length + 1); | ||
| 1299 | - buffer.SetLengthAndZeroTerminate(expected_length); | ||
| 1300 | - result = simdutf::base64_to_binary( | ||
| 1301 | - data, value.length(), buffer.out(), simdutf::base64_default); | ||
| 1311 | + buffer.AllocateSufficientStorage(expected_length); | ||
| 1312 | + buffer.SetLength(expected_length); | ||
| 1313 | + result = simdutf::base64_to_binary(data, value.length(), buffer.out()); | ||
| 1302 | 1314 | } | |
| 1303 | 1315 | ||
| 1304 | 1316 | if (result.error == simdutf::error_code::SUCCESS) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments