From 1d1531c8d9cffa6eb205aa93305080647e8574d0 Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Fri, 26 Jan 2024 22:08:37 +0000 Subject: [PATCH] [vm/io] Null-terminate scope-copied CStrings. Fixes https://github.com/dart-lang/sdk/issues/54741 TEST=standalone/io/io_override_test Change-Id: Ie907360dc4bcea05ef6fe3a5d4626e4e31399fc6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/348723 Commit-Queue: Alexander Aprelev Reviewed-by: Ryan Macnak --- runtime/bin/typed_data_utils.cc | 3 ++- tests/standalone/io/io_override_test.dart | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/runtime/bin/typed_data_utils.cc b/runtime/bin/typed_data_utils.cc index 7d4169273da..c07fb603cee 100644 --- a/runtime/bin/typed_data_utils.cc +++ b/runtime/bin/typed_data_utils.cc @@ -56,8 +56,9 @@ intptr_t TypedDataScope::size_in_bytes() const { } const char* TypedDataScope::GetScopedCString() const { - char* buf = reinterpret_cast(Dart_ScopeAllocate(size_in_bytes())); + char* buf = reinterpret_cast(Dart_ScopeAllocate(size_in_bytes() + 1)); strncpy(buf, GetCString(), size_in_bytes()); + buf[size_in_bytes()] = '\0'; return buf; } diff --git a/tests/standalone/io/io_override_test.dart b/tests/standalone/io/io_override_test.dart index 79d3925478c..816b54c7401 100644 --- a/tests/standalone/io/io_override_test.dart +++ b/tests/standalone/io/io_override_test.dart @@ -293,8 +293,19 @@ globalIOOverridesZoneTest() { Expect.isTrue(dir is Directory); } +class EmptyOverride extends IOOverrides {} + +void emptyIOOverride() { + IOOverrides.runWithIOOverrides( + () => Expect.equals( + FileSystemEntity.typeSync('/'), FileSystemEntityType.directory), + EmptyOverride(), + ); +} + main() async { await ioOverridesRunTest(); globalIOOverridesTest(); globalIOOverridesZoneTest(); + emptyIOOverride(); }