From 3b5a81936d8955a2de3ab4d3732bc5a7f9baec8a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 9 Dec 2020 17:01:03 +1100 Subject: Fix custom property UI handling names with quotes and back-slashes Custom property names wasn't escaping strings, causing exceptions editing custom properties with characters that needed to be escaped. --- release/scripts/modules/rna_prop_ui.py | 2 +- release/scripts/startup/bl_operators/wm.py | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'release') diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py index 8fdd66dff9f..e3158118146 100644 --- a/release/scripts/modules/rna_prop_ui.py +++ b/release/scripts/modules/rna_prop_ui.py @@ -49,7 +49,7 @@ def rna_idprop_ui_del(item): def rna_idprop_quote_path(prop): - return "[\"%s\"]" % prop.replace("\"", "\\\"") + return "[\"%s\"]" % bpy.utils.escape_identifier(prop) def rna_idprop_ui_prop_update(item, prop): diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 387e93cb769..3d8ed7ef0b5 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1265,6 +1265,7 @@ class WM_OT_properties_edit(Operator): data_path = self.data_path prop = self.property + prop_escape = bpy.utils.escape_identifier(prop) prop_old = getattr(self, "_last_prop", [None])[0] @@ -1289,7 +1290,7 @@ class WM_OT_properties_edit(Operator): # Reassign item[prop] = value_eval - item.property_overridable_library_set('["%s"]' % prop, self.is_overridable_library) + item.property_overridable_library_set('["%s"]' % prop_escape, self.is_overridable_library) rna_idprop_ui_prop_update(item, prop) self._last_prop[:] = [prop] @@ -1322,7 +1323,7 @@ class WM_OT_properties_edit(Operator): # If we have changed the type of the property, update its potential anim curves! if prop_type_old != prop_type_new: - data_path = '["%s"]' % bpy.utils.escape_identifier(prop) + data_path = '["%s"]' % prop_escape done = set() def _update(fcurves): @@ -1364,13 +1365,16 @@ class WM_OT_properties_edit(Operator): rna_idprop_value_item_type ) + prop = self.property + prop_escape = bpy.utils.escape_identifier(prop) + data_path = self.data_path if not data_path: self.report({'ERROR'}, "Data path not set") return {'CANCELLED'} - self._last_prop = [self.property] + self._last_prop = [prop] item = eval("context.%s" % data_path) @@ -1379,7 +1383,7 @@ class WM_OT_properties_edit(Operator): return {'CANCELLED'} # retrieve overridable static - is_overridable = item.is_property_overridable_library('["%s"]' % self.property) + is_overridable = item.is_property_overridable_library('["%s"]' % prop_escape) self.is_overridable_library = bool(is_overridable) # default default value @@ -1390,7 +1394,7 @@ class WM_OT_properties_edit(Operator): self.default = "" # setup defaults - prop_ui = rna_idprop_ui_prop_get(item, self.property, False) # don't create + prop_ui = rna_idprop_ui_prop_get(item, prop, False) # don't create if prop_ui: self.min = prop_ui.get("min", -1000000000) self.max = prop_ui.get("max", 1000000000) -- cgit v1.2.3