From 8b0b6f413d3cd8f16f13e26f401b838b859d1ed6 Mon Sep 17 00:00:00 2001 From: Julien Boeuf Date: Tue, 22 Sep 2015 13:31:16 -0700 Subject: [PATCH] It is a bad idea to have a map with string_refs as output params. This is very much unsafe as the string_ref could point on a stack variable of the callee. --- include/grpc++/security/auth_metadata_processor.h | 2 +- include/grpc++/security/credentials.h | 2 +- src/cpp/client/secure_credentials.cc | 2 +- test/cpp/end2end/end2end_test.cc | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/grpc++/security/auth_metadata_processor.h b/include/grpc++/security/auth_metadata_processor.h index 18ad9223217..9b9c06e3b63 100644 --- a/include/grpc++/security/auth_metadata_processor.h +++ b/include/grpc++/security/auth_metadata_processor.h @@ -45,7 +45,7 @@ namespace grpc { class AuthMetadataProcessor { public: typedef std::multimap InputMetadata; - typedef std::multimap OutputMetadata; + typedef std::multimap OutputMetadata; virtual ~AuthMetadataProcessor() {} diff --git a/include/grpc++/security/credentials.h b/include/grpc++/security/credentials.h index fafcfdc9061..ff41bc597eb 100644 --- a/include/grpc++/security/credentials.h +++ b/include/grpc++/security/credentials.h @@ -180,7 +180,7 @@ class MetadataCredentialsPlugin { // Gets the auth metatada produced by this plugin. virtual Status GetMetadata( grpc::string_ref service_url, - std::multimap* metadata) = 0; + std::multimap* metadata) = 0; }; std::shared_ptr MetadataCredentialsFromPlugin( diff --git a/src/cpp/client/secure_credentials.cc b/src/cpp/client/secure_credentials.cc index 99b7468e865..1693cf740bd 100644 --- a/src/cpp/client/secure_credentials.cc +++ b/src/cpp/client/secure_credentials.cc @@ -173,7 +173,7 @@ void MetadataCredentialsPluginWrapper::GetMetadata( void MetadataCredentialsPluginWrapper::InvokePlugin( const char* service_url, grpc_credentials_plugin_metadata_cb cb, void* user_data) { - std::multimap metadata; + std::multimap metadata; Status status = plugin_->GetMetadata(service_url, &metadata); std::vector md; for (auto it = metadata.begin(); it != metadata.end(); ++it) { diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index b3cfcd51a75..5017e8a230f 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -121,7 +121,7 @@ class TestMetadataCredentialsPlugin : public MetadataCredentialsPlugin { bool IsBlocking() const GRPC_OVERRIDE { return is_blocking_; } Status GetMetadata(grpc::string_ref service_url, - std::multimap* metadata) + std::multimap* metadata) GRPC_OVERRIDE { EXPECT_GT(service_url.length(), 0UL); EXPECT_TRUE(metadata != nullptr); @@ -175,9 +175,9 @@ class TestAuthMetadataProcessor : public AuthMetadataProcessor { if (auth_md_value == kGoodGuy) { context->AddProperty(kIdentityPropName, kGoodGuy); context->SetPeerIdentityPropertyName(kIdentityPropName); - consumed_auth_metadata->insert( - std::make_pair(string(auth_md->first.data(), auth_md->first.length()), - auth_md->second)); + consumed_auth_metadata->insert(std::make_pair( + string(auth_md->first.data(), auth_md->first.length()), + string(auth_md->second.data(), auth_md->second.length()))); return Status::OK; } else { return Status(StatusCode::UNAUTHENTICATED,