From bd831b42fc95cae0bef8cc2e7d9d38f084503901 Mon Sep 17 00:00:00 2001 From: Ivan Filenko Date: Wed, 24 Jan 2018 01:42:40 +0300 Subject: [PATCH] src: define URLHost::Reset() function Fixes: https://github.com/nodejs/node/issues/18302 --- src/node_url.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/node_url.cc b/src/node_url.cc index 853a23d40d7d1e..a5ed89fa84eb78 100644 --- a/src/node_url.cc +++ b/src/node_url.cc @@ -92,6 +92,15 @@ class URLHost { Value value_; HostType type_ = HostType::H_FAILED; + inline void Reset() { + using string = std::string; + switch (type_) { + case HostType::H_DOMAIN: value_.domain.~string(); break; + case HostType::H_OPAQUE: value_.opaque.~string(); break; + default: break; + } + } + // Setting the string members of the union with = is brittle because // it relies on them being initialized to a state that requires no // destruction of old data. @@ -112,12 +121,7 @@ class URLHost { }; URLHost::~URLHost() { - using string = std::string; - switch (type_) { - case HostType::H_DOMAIN: value_.domain.~string(); break; - case HostType::H_OPAQUE: value_.opaque.~string(); break; - default: break; - } + Reset(); } #define ARGS(XX) \