From ff633f5fbe026dd851031cce17705e716bac0f72 Mon Sep 17 00:00:00 2001 From: Andrew Bell Date: Tue, 20 Oct 2020 09:26:58 -0400 Subject: [PATCH] Handle invalid strings in metadata. --- pdal/plang/Environment.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/pdal/plang/Environment.cpp b/pdal/plang/Environment.cpp index 6520d7a6..6ebdec11 100644 --- a/pdal/plang/Environment.cpp +++ b/pdal/plang/Environment.cpp @@ -244,11 +244,19 @@ PyObject *fromMetadata(MetadataNode m) PyList_Append(submeta, fromMetadata(child)); } PyObject *data = PyDict_New(); - PyDict_SetItemString(data, "name", PyUnicode_FromString(name.data())); - PyDict_SetItemString(data, "value", PyUnicode_FromString(value.data())); - PyDict_SetItemString(data, "type", PyUnicode_FromString(type.data())); - PyDict_SetItemString(data, "description", - PyUnicode_FromString(description.data())); + + auto getString = [](const std::string& s) + { + PyObject *o = PyUnicode_FromString(s.data()); + if (!o) + o = PyUnicode_FromString(""); + return o; + }; + + PyDict_SetItemString(data, "name", getString(name)); + PyDict_SetItemString(data, "value", getString(value)); + PyDict_SetItemString(data, "type", getString(value)); + PyDict_SetItemString(data, "description", getString(description)); if (children.size()) PyDict_SetItemString(data, "children", submeta);