Commit c52ae8e5 authored by Sergey Ulanov's avatar Sergey Ulanov Committed by Commit Bot

[Fuchsia] Fix FilteredServiceDirectory to copy service name from char*.

Previously FilteredServiceDirectory was taking service names as char*
and then retaining that pointer to use it later. This didn't work
correctly when AddService() was called with name that's not stored in a
static buffer. Updated it to take StringPiece and then copy it to
std::string internally.

Change-Id: I382e3929eabb9806f4a74664ed355da886dcc61a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1935723Reviewed-by: default avatarWez <wez@chromium.org>
Commit-Queue: Wez <wez@chromium.org>
Auto-Submit: Sergey Ulanov <sergeyu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#719417}
parent ccbe8ed1
...@@ -20,15 +20,15 @@ FilteredServiceDirectory::FilteredServiceDirectory( ...@@ -20,15 +20,15 @@ FilteredServiceDirectory::FilteredServiceDirectory(
FilteredServiceDirectory::~FilteredServiceDirectory() {} FilteredServiceDirectory::~FilteredServiceDirectory() {}
void FilteredServiceDirectory::AddService(const char* service_name) { void FilteredServiceDirectory::AddService(base::StringPiece service_name) {
outgoing_directory_.AddPublicService( outgoing_directory_.AddPublicService(
std::make_unique<vfs::Service>( std::make_unique<vfs::Service>(
[this, service_name](zx::channel channel, [this, service_name = service_name.as_string()](
async_dispatcher_t* dispatcher) { zx::channel channel, async_dispatcher_t* dispatcher) {
DCHECK_EQ(dispatcher, async_get_default_dispatcher()); DCHECK_EQ(dispatcher, async_get_default_dispatcher());
directory_->Connect(service_name, std::move(channel)); directory_->Connect(service_name, std::move(channel));
}), }),
service_name); service_name.as_string());
} }
void FilteredServiceDirectory::ConnectClient( void FilteredServiceDirectory::ConnectClient(
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "base/base_export.h" #include "base/base_export.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/strings/string_piece.h"
namespace base { namespace base {
namespace fuchsia { namespace fuchsia {
...@@ -28,7 +29,7 @@ class BASE_EXPORT FilteredServiceDirectory { ...@@ -28,7 +29,7 @@ class BASE_EXPORT FilteredServiceDirectory {
~FilteredServiceDirectory(); ~FilteredServiceDirectory();
// Adds the specified service to the list of whitelisted services. // Adds the specified service to the list of whitelisted services.
void AddService(const char* service_name); void AddService(base::StringPiece service_name);
// Connects a directory client. The directory can be passed to a sandboxed // Connects a directory client. The directory can be passed to a sandboxed
// process to be used for /svc namespace. // process to be used for /svc namespace.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment