Browse Source

Always dynamically allocate PropertyTable

- `Texture::~Texture` expects `props` to be dynamically allocated.

- `GetPropertyTable` returned a pointer to an existing `PropertyTable`
  but is expected to return a newly, dynamically allocated one.

- `PropertyTable::PropertyTable()` suggests that an empty `element`
  property is valid.

fix #46876
fix #45573

(cherry picked from commit 09bda3f140937aaf5e4f028f7f04656ca30c7e6b)
Alex Hirsch 4 years ago
parent
commit
6a7ee81610

+ 1 - 1
modules/fbx/fbx_parser/FBXDocumentUtil.cpp

@@ -160,7 +160,7 @@ const PropertyTable *GetPropertyTable(const Document &doc,
 			DOMWarning("property table (Properties70) not found", element);
 		}
 		if (templateProps) {
-			return templateProps;
+			return new const PropertyTable(templateProps);
 		} else {
 			return new const PropertyTable();
 		}

+ 5 - 0
modules/fbx/fbx_parser/FBXProperties.cpp

@@ -150,6 +150,11 @@ PropertyTable::PropertyTable() :
 		templateProps(), element() {
 }
 
+// ------------------------------------------------------------------------------------------------
+PropertyTable::PropertyTable(const PropertyTable *templateProps) :
+		templateProps(templateProps), element() {
+}
+
 // ------------------------------------------------------------------------------------------------
 PropertyTable::PropertyTable(const ElementPtr element, const PropertyTable *templateProps) :
 		templateProps(templateProps), element(element) {

+ 1 - 0
modules/fbx/fbx_parser/FBXProperties.h

@@ -137,6 +137,7 @@ class PropertyTable {
 public:
 	// in-memory property table with no source element
 	PropertyTable();
+	PropertyTable(const PropertyTable *templateProps);
 	PropertyTable(const ElementPtr element, const PropertyTable *templateProps);
 	~PropertyTable();