From 722294075dc4fd0d7423ede9a5fa24d2074cd626 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 26 Oct 2020 18:33:10 +0100 Subject: [PATCH] VST3: fix UTF-16 host message --- libs/ardour/ardour/vst3_host.h | 3 ++- libs/ardour/vst3_host.cc | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libs/ardour/ardour/vst3_host.h b/libs/ardour/ardour/vst3_host.h index 8703e39a1a..62ead79d69 100644 --- a/libs/ardour/ardour/vst3_host.h +++ b/libs/ardour/ardour/vst3_host.h @@ -90,8 +90,9 @@ public: : _size (size) , _type (kString) { - v.stringValue = new Vst::TChar[_size]; + v.stringValue = new Vst::TChar[_size + 1]; memcpy (v.stringValue, value, _size * sizeof (Vst::TChar)); + v.stringValue[size] = 0; } HostAttribute (const void* value, uint32 size) diff --git a/libs/ardour/vst3_host.cc b/libs/ardour/vst3_host.cc index 4c27281f32..5f02c743ef 100644 --- a/libs/ardour/vst3_host.cc +++ b/libs/ardour/vst3_host.cc @@ -212,7 +212,7 @@ tresult HostAttributeList::setString (AttrID aid, const Vst::TChar* string) { removeAttrID (aid); - list[aid] = new HostAttribute (string, wcslen ((const wchar_t*)string)); + list[aid] = new HostAttribute (string, Steinberg::strlen16 (string)); return kResultTrue; } @@ -220,10 +220,13 @@ tresult HostAttributeList::getString (AttrID aid, Vst::TChar* string, uint32 size) { std::map::iterator it = list.find (aid); - if (it != list.end () && it->second) { + if (it != list.end () && it->second && size > 0) { uint32 stringSize = 0; const Vst::TChar* _string = it->second->stringValue (stringSize); - memcpy (string, _string, std::min (stringSize, size) * sizeof (Vst::TChar)); + + size = std::min (stringSize, size - 1); + memcpy (string, _string, size * sizeof (Vst::TChar)); + string[size] = 0; return kResultTrue; } return kResultFalse;