From 1ccccbce04f63bf1d96465f8d89cb3b7251a9c3e Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 23 Nov 2016 01:09:09 +0000 Subject: [PATCH] Fix horrible leak in String::Data::operator=(String::Data&&) And that, my friends, is why we recommend using standard containers instead of rolling your own. --- src/string.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/string.cc b/src/string.cc index 5a229030..18ae5d80 100644 --- a/src/string.cc +++ b/src/string.cc @@ -34,7 +34,7 @@ String::Data::Data(Data&& other) noexcept if (other.is_long()) { l = other.l; - other.s.size = 1; + other.set_empty(); } else s = other.s; @@ -52,6 +52,8 @@ String::Data& String::Data::operator=(const Data& other) String::Data& String::Data::operator=(Data&& other) noexcept { + release(); + if (other.is_long()) { l = other.l;