Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 2fa5f69

Browse files
authored
Fix StandardMessageCodec test leaks (#27959)
1 parent 3ee19b4 commit 2fa5f69

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

shell/platform/common/client_wrapper/standard_codec.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,8 @@ const StandardMessageCodec& StandardMessageCodec::GetInstance(
295295
if (!serializer) {
296296
serializer = &StandardCodecSerializer::GetInstance();
297297
}
298-
auto* sInstances = new std::map<const StandardCodecSerializer*,
299-
std::unique_ptr<StandardMessageCodec>>;
298+
static auto* sInstances = new std::map<const StandardCodecSerializer*,
299+
std::unique_ptr<StandardMessageCodec>>;
300300
auto it = sInstances->find(serializer);
301301
if (it == sInstances->end()) {
302302
// Uses new due to private constructor (to prevent API clients from
@@ -342,8 +342,8 @@ const StandardMethodCodec& StandardMethodCodec::GetInstance(
342342
if (!serializer) {
343343
serializer = &StandardCodecSerializer::GetInstance();
344344
}
345-
auto* sInstances = new std::map<const StandardCodecSerializer*,
346-
std::unique_ptr<StandardMethodCodec>>;
345+
static auto* sInstances = new std::map<const StandardCodecSerializer*,
346+
std::unique_ptr<StandardMethodCodec>>;
347347
auto it = sInstances->find(serializer);
348348
if (it == sInstances->end()) {
349349
// Uses new due to private constructor (to prevent API clients from

shell/platform/common/client_wrapper/standard_message_codec_unittests.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,14 @@ static void CheckEncodeDecodeWithEncodePrefix(
7676
EXPECT_EQ(value, *decoded);
7777
}
7878

79+
TEST(StandardMessageCodec, GetInstanceCachesInstance) {
80+
const StandardMessageCodec& codec_a =
81+
StandardMessageCodec::GetInstance(nullptr);
82+
const StandardMessageCodec& codec_b =
83+
StandardMessageCodec::GetInstance(nullptr);
84+
EXPECT_EQ(&codec_a, &codec_b);
85+
}
86+
7987
TEST(StandardMessageCodec, CanEncodeAndDecodeNull) {
8088
std::vector<uint8_t> bytes = {0x00};
8189
CheckEncodeDecode(EncodableValue(), bytes);

shell/platform/common/client_wrapper/standard_method_codec_unittests.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ bool MethodCallsAreEqual(const MethodCall<>& a, const MethodCall<>& b) {
3232

3333
} // namespace
3434

35+
TEST(StandardMethodCodec, GetInstanceCachesInstance) {
36+
const StandardMethodCodec& codec_a =
37+
StandardMethodCodec::GetInstance(nullptr);
38+
const StandardMethodCodec& codec_b =
39+
StandardMethodCodec::GetInstance(nullptr);
40+
EXPECT_EQ(&codec_a, &codec_b);
41+
}
42+
3543
TEST(StandardMethodCodec, HandlesMethodCallsWithNullArguments) {
3644
const StandardMethodCodec& codec = StandardMethodCodec::GetInstance();
3745
MethodCall<> call("hello", nullptr);

0 commit comments

Comments
 (0)