Skip to content

Commit dcb0c67

Browse files
Fix leak on copy (#25)
1 parent c603641 commit dcb0c67

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

include/signalrclient/signalr_value.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,5 +184,7 @@ namespace signalr
184184
};
185185

186186
storage mStorage;
187+
188+
void destruct_internals();
187189
};
188190
}

src/signalrclient/json_hub_protocol.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace signalr
2222
auto pos = message.find(record_separator, offset);
2323
while (pos != std::string::npos)
2424
{
25-
auto hub_message = parse_message(message.substr(offset, pos - offset));
25+
auto hub_message = parse_message(message.c_str() + offset, pos - offset);
2626
vec.push_back(std::move(hub_message));
2727

2828
offset = pos + 1;
@@ -33,13 +33,13 @@ namespace signalr
3333
return vec;
3434
}
3535

36-
signalr::value json_hub_protocol::parse_message(const std::string& message) const
36+
signalr::value json_hub_protocol::parse_message(const char* begin, size_t length) const
3737
{
3838
Json::Value root;
3939
auto reader = getJsonReader();
4040
std::string errors;
4141

42-
if (!reader->parse(message.c_str(), message.c_str() + message.size(), &root, &errors))
42+
if (!reader->parse(begin, begin + length, &root, &errors))
4343
{
4444
throw signalr_exception(errors);
4545
}

src/signalrclient/json_hub_protocol.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace signalr
2424

2525
~json_hub_protocol() {}
2626
private:
27-
signalr::value parse_message(const std::string&) const;
27+
signalr::value parse_message(const char* begin, size_t length) const;
2828

2929
std::string m_protocol_name = "json";
3030
};

src/signalrclient/signalr_value.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ namespace signalr
151151
}
152152

153153
value::~value()
154+
{
155+
destruct_internals();
156+
}
157+
158+
void value::destruct_internals()
154159
{
155160
switch (mType)
156161
{
@@ -170,6 +175,8 @@ namespace signalr
170175

171176
value& value::operator=(const value& rhs)
172177
{
178+
destruct_internals();
179+
173180
mType = rhs.mType;
174181
switch (mType)
175182
{
@@ -197,6 +204,8 @@ namespace signalr
197204

198205
value& value::operator=(value&& rhs) noexcept
199206
{
207+
destruct_internals();
208+
200209
mType = std::move(rhs.mType);
201210
switch (mType)
202211
{

0 commit comments

Comments
 (0)