From 7dde3551853018147d99e9454abb337384e7a32e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 23 Apr 2013 20:10:22 +0000 Subject: fix [#34958] keyframe many items would fail if there was a (") in the text. --- source/blender/makesrna/intern/rna_access.c | 19 ++++-- source/blender/makesrna/intern/rna_armature.c | 17 +++--- source/blender/makesrna/intern/rna_boid.c | 7 ++- source/blender/makesrna/intern/rna_cloth.c | 18 +++++- source/blender/makesrna/intern/rna_constraint.c | 17 ++++-- source/blender/makesrna/intern/rna_dynamicpaint.c | 14 ++++- source/blender/makesrna/intern/rna_fluidsim.c | 4 +- source/blender/makesrna/intern/rna_key.c | 16 +++-- source/blender/makesrna/intern/rna_linestyle.c | 20 +++++-- source/blender/makesrna/intern/rna_mask.c | 5 +- source/blender/makesrna/intern/rna_mesh.c | 73 +++++++++++++++++------ source/blender/makesrna/intern/rna_modifier.c | 6 +- source/blender/makesrna/intern/rna_nla.c | 8 ++- source/blender/makesrna/intern/rna_nodetree.c | 19 +++--- source/blender/makesrna/intern/rna_object_force.c | 28 ++++++--- source/blender/makesrna/intern/rna_particle.c | 5 +- source/blender/makesrna/intern/rna_pose.c | 6 +- source/blender/makesrna/intern/rna_scene.c | 5 +- source/blender/makesrna/intern/rna_sequencer.c | 61 ++++++++++++++----- source/blender/makesrna/intern/rna_smoke.c | 12 +++- source/blender/makesrna/intern/rna_texture.c | 11 +++- source/blender/makesrna/intern/rna_tracking.c | 7 ++- 22 files changed, 285 insertions(+), 93 deletions(-) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 9a102c823a9..cfdfbf4e687 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -4325,14 +4325,25 @@ char *RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop) propname = RNA_property_identifier(prop); if (ptrpath) { - path = BLI_sprintfN(is_rna ? "%s.%s" : "%s[\"%s\"]", ptrpath, propname); + if (is_rna) { + path = BLI_sprintfN("%s.%s", ptrpath, propname); + } + else { + char propname_esc[MAX_IDPROP_NAME * 2]; + BLI_strescape(propname_esc, propname, sizeof(propname_esc)); + path = BLI_sprintfN("%s[\"%s\"]", ptrpath, propname_esc); + } MEM_freeN(ptrpath); } else if (RNA_struct_is_ID(ptr->type)) { - if (is_rna) + if (is_rna) { path = BLI_strdup(propname); - else - path = BLI_sprintfN("[\"%s\"]", propname); + } + else { + char propname_esc[MAX_IDPROP_NAME * 2]; + BLI_strescape(propname_esc, propname, sizeof(propname_esc)); + path = BLI_sprintfN("[\"%s\"]", propname_esc); + } } else { path = NULL; diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index 1bc6c7e4f6f..b222dd9148b 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -191,20 +191,23 @@ static void rna_Bone_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po static char *rna_Bone_path(PointerRNA *ptr) { + ID *id = ptr->id.data; Bone *bone = (Bone *)ptr->data; + char name_esc[sizeof(bone->name) * 2]; + BLI_strescape(name_esc, bone->name, sizeof(name_esc)); + /* special exception for trying to get the path where ID-block is Object - * - this will be assumed to be from a Pose Bone... + * - this will be assumed to be from a Pose Bone... */ - if (ptr->id.data) { - ID *id = (ID *)ptr->id.data; - - if (GS(id->name) == ID_OB) - return BLI_sprintfN("pose.bones[\"%s\"].bone", bone->name); + if (id) { + if (GS(id->name) == ID_OB) { + return BLI_sprintfN("pose.bones[\"%s\"].bone", name_esc); + } } /* from armature... */ - return BLI_sprintfN("bones[\"%s\"]", bone->name); + return BLI_sprintfN("bones[\"%s\"]", name_esc); } static IDProperty *rna_Bone_idprops(PointerRNA *ptr, bool create) diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c index 9d44ae87b57..9b2ce863108 100644 --- a/source/blender/makesrna/intern/rna_boid.c +++ b/source/blender/makesrna/intern/rna_boid.c @@ -142,7 +142,12 @@ static StructRNA *rna_BoidRule_refine(struct PointerRNA *ptr) static char *rna_BoidRule_path(PointerRNA *ptr) { - return BLI_sprintfN("rules[\"%s\"]", ((BoidRule *)ptr->data)->name); /* XXX not unique */ + BoidRule *rule = (BoidRule *)ptr->data; + char name_esc[sizeof(rule->name) * 2]; + + BLI_strescape(name_esc, rule->name, sizeof(name_esc)); + + return BLI_sprintfN("rules[\"%s\"]", name_esc); /* XXX not unique */ } static PointerRNA rna_BoidState_active_boid_rule_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c index 74b0f69c9b8..d5c63800aea 100644 --- a/source/blender/makesrna/intern/rna_cloth.c +++ b/source/blender/makesrna/intern/rna_cloth.c @@ -212,7 +212,14 @@ static char *rna_ClothSettings_path(PointerRNA *ptr) Object *ob = (Object *)ptr->id.data; ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth); - return md ? BLI_sprintfN("modifiers[\"%s\"].settings", md->name) : NULL; + if (md) { + char name_esc[sizeof(md->name) * 2]; + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc); + } + else { + return NULL; + } } static char *rna_ClothCollisionSettings_path(PointerRNA *ptr) @@ -220,7 +227,14 @@ static char *rna_ClothCollisionSettings_path(PointerRNA *ptr) Object *ob = (Object *)ptr->id.data; ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth); - return md ? BLI_sprintfN("modifiers[\"%s\"].collision_settings", md->name) : NULL; + if (md) { + char name_esc[sizeof(md->name) * 2]; + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].collision_settings", name_esc); + } + else { + return NULL; + } } #else diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index c96ea72fee2..05d4c5a59d2 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -251,14 +251,21 @@ static char *rna_Constraint_path(PointerRNA *ptr) ListBase *lb = get_constraint_lb(ob, con, &pchan); if (lb == NULL) - printf("rna_Constraint_path: internal error, constraint '%s' not found in object '%s'\n", - con->name, ob->id.name); + printf("%s: internal error, constraint '%s' not found in object '%s'\n", + __func__, con->name, ob->id.name); if (pchan) { - return BLI_sprintfN("pose.bones[\"%s\"].constraints[\"%s\"]", pchan->name, con->name); + char name_esc_pchan[sizeof(pchan->name) * 2]; + char name_esc_const[sizeof(con->name) * 2]; + BLI_strescape(name_esc_pchan, pchan->name, sizeof(name_esc_pchan)); + BLI_strescape(name_esc_const, con->name, sizeof(name_esc_const)); + return BLI_sprintfN("pose.bones[\"%s\"].constraints[\"%s\"]", name_esc_pchan, name_esc_const); + } + else { + char name_esc_const[sizeof(con->name) * 2]; + BLI_strescape(name_esc_const, con->name, sizeof(name_esc_const)); + return BLI_sprintfN("constraints[\"%s\"]", name_esc_const); } - - return BLI_sprintfN("constraints[\"%s\"]", con->name); } static void rna_Constraint_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c index 1e5bcad1384..900ae5122ef 100644 --- a/source/blender/makesrna/intern/rna_dynamicpaint.c +++ b/source/blender/makesrna/intern/rna_dynamicpaint.c @@ -62,24 +62,32 @@ static char *rna_DynamicPaintCanvasSettings_path(PointerRNA *ptr) { DynamicPaintCanvasSettings *settings = (DynamicPaintCanvasSettings *)ptr->data; ModifierData *md = (ModifierData *)settings->pmd; + char name_esc[sizeof(md->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].canvas_settings", md->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].canvas_settings", name_esc); } static char *rna_DynamicPaintBrushSettings_path(PointerRNA *ptr) { DynamicPaintBrushSettings *settings = (DynamicPaintBrushSettings *)ptr->data; ModifierData *md = (ModifierData *)settings->pmd; + char name_esc[sizeof(md->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].brush_settings", md->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].brush_settings", name_esc); } static char *rna_DynamicPaintSurface_path(PointerRNA *ptr) { DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data; ModifierData *md = (ModifierData *)surface->canvas->pmd; + char name_esc[sizeof(md->name) * 2]; + char name_esc_surface[sizeof(surface->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].canvas_settings.canvas_surfaces[\"%s\"]", md->name, surface->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + BLI_strescape(name_esc_surface, surface->name, sizeof(name_esc_surface)); + return BLI_sprintfN("modifiers[\"%s\"].canvas_settings.canvas_surfaces[\"%s\"]", name_esc, name_esc_surface); } diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c index 45ce3676b5a..923e52e29c0 100644 --- a/source/blender/makesrna/intern/rna_fluidsim.c +++ b/source/blender/makesrna/intern/rna_fluidsim.c @@ -197,8 +197,10 @@ static char *rna_FluidSettings_path(PointerRNA *ptr) { FluidsimSettings *fss = (FluidsimSettings *)ptr->data; ModifierData *md = (ModifierData *)fss->fmd; + char name_esc[sizeof(md->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].settings", md->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc); } static void rna_FluidMeshVertex_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index b84436820b8..4e8b8d7b1a7 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -351,11 +351,14 @@ static char *rna_ShapeKey_path(PointerRNA *ptr) { KeyBlock *kb = (KeyBlock *)ptr->data; ID *id = ptr->id.data; - + char name_esc[sizeof(kb->name) * 2]; + + BLI_strescape(name_esc, kb->name, sizeof(name_esc)); + if ((id) && (GS(id->name) != ID_KE)) - return BLI_sprintfN("shape_keys.key_blocks[\"%s\"]", kb->name); + return BLI_sprintfN("shape_keys.key_blocks[\"%s\"]", name_esc); else - return BLI_sprintfN("key_blocks[\"%s\"]", kb->name); + return BLI_sprintfN("key_blocks[\"%s\"]", name_esc); } static void rna_Key_update_data(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) @@ -436,12 +439,15 @@ static char *rna_ShapeKeyPoint_path(PointerRNA *ptr) kb = rna_ShapeKeyData_find_keyblock(key, point); if (kb) { + char name_esc_kb[sizeof(kb->name) * 2]; int index = rna_ShapeKeyPoint_get_index(key, kb, point); + + BLI_strescape(name_esc_kb, kb->name, sizeof(name_esc_kb)); if (GS(id->name) == ID_KE) - return BLI_sprintfN("key_blocks[\"%s\"].data[%d]", kb->name, index); + return BLI_sprintfN("key_blocks[\"%s\"].data[%d]", name_esc_kb, index); else - return BLI_sprintfN("shape_keys.key_blocks[\"%s\"].data[%d]", kb->name, index); + return BLI_sprintfN("shape_keys.key_blocks[\"%s\"].data[%d]", name_esc_kb, index); } else return NULL; /* XXX: there's really no way to resolve this... */ diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c index 5db9329cd27..660ef57dbfe 100644 --- a/source/blender/makesrna/intern/rna_linestyle.c +++ b/source/blender/makesrna/intern/rna_linestyle.c @@ -179,22 +179,34 @@ static StructRNA *rna_LineStyle_geometry_modifier_refine(struct PointerRNA *ptr) static char *rna_LineStyle_color_modifier_path(PointerRNA *ptr) { - return BLI_sprintfN("color_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name); + LineStyleModifier *m = (LineStyleModifier *)ptr->data; + char name_esc[sizeof(m->name) * 2]; + BLI_strescape(name_esc, m->name, sizeof(name_esc)); + return BLI_sprintfN("color_modifiers[\"%s\"]", name_esc); } static char *rna_LineStyle_alpha_modifier_path(PointerRNA *ptr) { - return BLI_sprintfN("alpha_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name); + LineStyleModifier *m = (LineStyleModifier *)ptr->data; + char name_esc[sizeof(m->name) * 2]; + BLI_strescape(name_esc, m->name, sizeof(name_esc)); + return BLI_sprintfN("alpha_modifiers[\"%s\"]", name_esc); } static char *rna_LineStyle_thickness_modifier_path(PointerRNA *ptr) { - return BLI_sprintfN("thickness_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name); + LineStyleModifier *m = (LineStyleModifier *)ptr->data; + char name_esc[sizeof(m->name) * 2]; + BLI_strescape(name_esc, m->name, sizeof(name_esc)); + return BLI_sprintfN("thickness_modifiers[\"%s\"]", name_esc); } static char *rna_LineStyle_geometry_modifier_path(PointerRNA *ptr) { - return BLI_sprintfN("geometry_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name); + LineStyleModifier *m = (LineStyleModifier *)ptr->data; + char name_esc[sizeof(m->name) * 2]; + BLI_strescape(name_esc, m->name, sizeof(name_esc)); + return BLI_sprintfN("geometry_modifiers[\"%s\"]", name_esc); } static void rna_LineStyleColorModifier_name_set(PointerRNA *ptr, const char *value) diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c index c47b81ec9ca..6d43f529e65 100644 --- a/source/blender/makesrna/intern/rna_mask.c +++ b/source/blender/makesrna/intern/rna_mask.c @@ -168,7 +168,10 @@ static void rna_Mask_layer_active_index_range(PointerRNA *ptr, int *min, int *ma static char *rna_MaskLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("layers[\"%s\"]", ((MaskLayer *)ptr->data)->name); + MaskLayer *masklay = (MaskLayer *)ptr->data; + char name_esc[sizeof(masklay->name) * 2]; + BLI_strescape(name_esc, masklay->name, sizeof(name_esc)); + return BLI_sprintfN("layers[\"%s\"]", name_esc); } static PointerRNA rna_Mask_layer_active_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index be058bbfb4c..c5160cbd6e0 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -562,7 +562,10 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_layer, ldata, CD_MLOOPUV, rende static char *rna_MeshUVLoopLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("uv_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("uv_layers[\"%s\"]", name_esc); } static void rna_MeshUVLoopLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) @@ -879,7 +882,10 @@ DEFINE_CUSTOMDATA_LAYER_COLLECTION(skin_vertice, vdata, CD_MVERT_SKIN); static char *rna_MeshSkinVertexLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("skin_vertices[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("skin_vertices[\"%s\"]", name_esc); } static char *rna_VertCustomData_data_path(PointerRNA *ptr, char *collection, int type); @@ -1101,12 +1107,18 @@ static char *rna_MeshVertex_path(PointerRNA *ptr) static char *rna_MeshTextureFaceLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("tessface_uv_textures[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("tessface_uv_textures[\"%s\"]", name_esc); } static char *rna_MeshTexturePolyLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("uv_textures[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("uv_textures[\"%s\"]", name_esc); } static char *rna_VertCustomData_data_path(PointerRNA *ptr, char *collection, int type) @@ -1119,8 +1131,11 @@ static char *rna_VertCustomData_data_path(PointerRNA *ptr, char *collection, int for (cdl = vdata->layers, a = 0; a < vdata->totlayer; cdl++, a++) { if (cdl->type == type) { b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type); - if (b >= 0 && b < totvert) - return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b); + if (b >= 0 && b < totvert) { + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b); + } } } @@ -1137,8 +1152,11 @@ static char *rna_PolyCustomData_data_path(PointerRNA *ptr, char *collection, int for (cdl = pdata->layers, a = 0; a < pdata->totlayer; cdl++, a++) { if (cdl->type == type) { b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type); - if (b >= 0 && b < totpoly) - return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b); + if (b >= 0 && b < totpoly) { + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b); + } } } @@ -1155,8 +1173,11 @@ static char *rna_LoopCustomData_data_path(PointerRNA *ptr, char *collection, int for (cdl = ldata->layers, a = 0; a < ldata->totlayer; cdl++, a++) { if (cdl->type == type) { b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type); - if (b >= 0 && b < totloop) - return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b); + if (b >= 0 && b < totloop) { + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b); + } } } @@ -1173,8 +1194,11 @@ static char *rna_FaceCustomData_data_path(PointerRNA *ptr, char *collection, int for (cdl = fdata->layers, a = 0; a < fdata->totlayer; cdl++, a++) { if (cdl->type == type) { b = ((char *)ptr->data - ((char *)cdl->data)) / CustomData_sizeof(type); - if (b >= 0 && b < totloop) - return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, cdl->name, b); + if (b >= 0 && b < totloop) { + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("%s[\"%s\"].data[%d]", collection, name_esc, b); + } } } @@ -1198,12 +1222,18 @@ static char *rna_MeshTexturePoly_path(PointerRNA *ptr) static char *rna_MeshColorLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("tessface_vertex_colors[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("tessface_vertex_colors[\"%s\"]", name_esc); } static char *rna_MeshLoopColorLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("vertex_colors[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("vertex_colors[\"%s\"]", name_esc); } static char *rna_MeshColor_path(PointerRNA *ptr) @@ -1213,7 +1243,10 @@ static char *rna_MeshColor_path(PointerRNA *ptr) static char *rna_MeshIntPropertyLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("int_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("int_layers[\"%s\"]", name_esc); } static char *rna_MeshIntProperty_path(PointerRNA *ptr) @@ -1223,7 +1256,10 @@ static char *rna_MeshIntProperty_path(PointerRNA *ptr) static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("float_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("float_layers[\"%s\"]", name_esc); } static char *rna_MeshFloatProperty_path(PointerRNA *ptr) @@ -1233,7 +1269,10 @@ static char *rna_MeshFloatProperty_path(PointerRNA *ptr) static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr) { - return BLI_sprintfN("string_layers[\"%s\"]", ((CustomDataLayer *)ptr->data)->name); + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("string_layers[\"%s\"]", name_esc); } static char *rna_MeshStringProperty_path(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 618feae57d4..d84c3fa039f 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -255,7 +255,11 @@ static void rna_Modifier_name_set(PointerRNA *ptr, const char *value) static char *rna_Modifier_path(PointerRNA *ptr) { - return BLI_sprintfN("modifiers[\"%s\"]", ((ModifierData *)ptr->data)->name); + ModifierData *md = ptr->data; + char name_esc[sizeof(md->name) * 2]; + + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"]", name_esc); } static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 9afaad96019..3bf6c11d935 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -84,7 +84,13 @@ static char *rna_NlaStrip_path(PointerRNA *ptr) for (nls = nlt->strips.first; nls; nls = nls->next) { if (nls == strip) { /* XXX but if we animate like this, the control will never work... */ - return BLI_sprintfN("animation_data.nla_tracks[\"%s\"].strips[\"%s\"]", nlt->name, strip->name); + char name_esc_nlt[sizeof(nlt->name) * 2]; + char name_esc_strip[sizeof(strip->name) * 2]; + + BLI_strescape(name_esc_nlt, nlt->name, sizeof(name_esc_nlt)); + BLI_strescape(name_esc_strip, strip->name, sizeof(name_esc_strip)); + return BLI_sprintfN("animation_data.nla_tracks[\"%s\"].strips[\"%s\"]", + name_esc_nlt, name_esc_strip); } } } diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 85c3c9d6b65..fad66a5e7ed 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -1071,8 +1071,10 @@ static StructRNA *rna_Node_refine(struct PointerRNA *ptr) static char *rna_Node_path(PointerRNA *ptr) { bNode *node = (bNode *)ptr->data; + char name_esc[sizeof(node->name) * 2]; - return BLI_sprintfN("nodes[\"%s\"]", node->name); + BLI_strescape(name_esc, node->name, sizeof(name_esc)); + return BLI_sprintfN("nodes[\"%s\"]", name_esc); } static int rna_Node_poll(bNodeType *ntype, bNodeTree *ntree) @@ -1818,16 +1820,19 @@ static char *rna_NodeSocket_path(PointerRNA *ptr) bNodeSocket *sock = (bNodeSocket *)ptr->data; bNode *node; int socketindex; + char name_esc[sizeof(node->name) * 2]; if (!nodeFindNode(ntree, sock, &node, &socketindex)) return NULL; - if (sock->in_out == SOCK_IN) - return BLI_sprintfN("nodes[\"%s\"].inputs[%d]", node->name, socketindex); - else - return BLI_sprintfN("nodes[\"%s\"].outputs[%d]", node->name, socketindex); - - return NULL; + BLI_strescape(name_esc, node->name, sizeof(name_esc)); + + if (sock->in_out == SOCK_IN) { + return BLI_sprintfN("nodes[\"%s\"].inputs[%d]", name_esc, socketindex); + } + else { + return BLI_sprintfN("nodes[\"%s\"].outputs[%d]", name_esc, socketindex); + } } static IDProperty *rna_NodeSocket_idprops(PointerRNA *ptr, bool create) diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c index ab8b54334fe..2d3f2ddf699 100644 --- a/source/blender/makesrna/intern/rna_object_force.c +++ b/source/blender/makesrna/intern/rna_object_force.c @@ -320,7 +320,10 @@ static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr)) ModifierData *md = (ModifierData *)modifiers_findByType(ob, eModifierType_Collision); if (md) { - return BLI_sprintfN("modifiers[\"%s\"].settings", md->name); + char name_esc[sizeof(md->name) * 2]; + + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc); } else { return BLI_strdup(""); @@ -462,8 +465,10 @@ static char *rna_SoftBodySettings_path(PointerRNA *ptr) { Object *ob = (Object *)ptr->id.data; ModifierData *md = (ModifierData *)modifiers_findByType(ob, eModifierType_Softbody); - - return BLI_sprintfN("modifiers[\"%s\"].settings", md->name); + char name_esc[sizeof(md->name) * 2]; + + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc); } static int particle_id_check(PointerRNA *ptr) @@ -613,13 +618,16 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr) else { Object *ob = (Object *)ptr->id.data; ModifierData *md; + char name_esc[sizeof(md->name) * 2]; + + BLI_strescape(name_esc, md->name, sizeof(name_esc)); /* check softbody modifier */ md = (ModifierData *)modifiers_findByType(ob, eModifierType_Softbody); if (md) { /* no pointer from modifier data to actual softbody storage, would be good to add */ if (ob->soft->effector_weights == ew) - return BLI_sprintfN("modifiers[\"%s\"].settings.effector_weights", md->name); + return BLI_sprintfN("modifiers[\"%s\"].settings.effector_weights", name_esc); } /* check cloth modifier */ @@ -628,7 +636,7 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr) ClothModifierData *cmd = (ClothModifierData *)md; if (cmd->sim_parms->effector_weights == ew) - return BLI_sprintfN("modifiers[\"%s\"].settings.effector_weights", md->name); + return BLI_sprintfN("modifiers[\"%s\"].settings.effector_weights", name_esc); } /* check smoke modifier */ @@ -637,7 +645,7 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr) SmokeModifierData *smd = (SmokeModifierData *)md; if (smd->domain->effector_weights == ew) - return BLI_sprintfN("modifiers[\"%s\"].settings.effector_weights", md->name); + return BLI_sprintfN("modifiers[\"%s\"].settings.effector_weights", name_esc); } /* check dynamic paint modifier */ @@ -649,9 +657,13 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr) DynamicPaintSurface *surface = pmd->canvas->surfaces.first; for (; surface; surface = surface->next) { - if (surface->effector_weights == ew) + if (surface->effector_weights == ew) { + char name_esc_surface[sizeof(surface->name) * 2]; + + BLI_strescape(name_esc_surface, surface->name, sizeof(name_esc_surface)); return BLI_sprintfN("modifiers[\"%s\"].canvas_settings.canvas_surfaces[\"%s\"]" - ".effector_weights", md->name, surface->name); + ".effector_weights", name_esc, name_esc_surface); + } } } } diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 9208f1273fc..140b9d74d06 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -1196,7 +1196,10 @@ static void psys_vg_name_set__internal(PointerRNA *ptr, const char *value, int i static char *rna_ParticleSystem_path(PointerRNA *ptr) { ParticleSystem *psys = (ParticleSystem *)ptr->data; - return BLI_sprintfN("particle_systems[\"%s\"]", psys->name); + char name_esc[sizeof(psys->name) * 2]; + + BLI_strescape(name_esc, psys->name, sizeof(name_esc)); + return BLI_sprintfN("particle_systems[\"%s\"]", name_esc); } static void rna_ParticleSettings_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index 0a19d7b5250..8c73aacc724 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -133,7 +133,11 @@ static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe static char *rna_PoseBone_path(PointerRNA *ptr) { - return BLI_sprintfN("pose.bones[\"%s\"]", ((bPoseChannel *)ptr->data)->name); + bPoseChannel *pchan = ptr->data; + char name_esc[sizeof(pchan->name) * 2]; + + BLI_strescape(name_esc, pchan->name, sizeof(name_esc)); + return BLI_sprintfN("pose.bones[\"%s\"]", name_esc); } /* shared for actions groups and bone groups */ diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index e589bde0744..0d224469b4e 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1138,7 +1138,10 @@ static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value) static char *rna_SceneRenderLayer_path(PointerRNA *ptr) { SceneRenderLayer *srl = (SceneRenderLayer *)ptr->data; - return BLI_sprintfN("render.layers[\"%s\"]", srl->name); + char name_esc[sizeof(srl->name) * 2]; + + BLI_strescape(name_esc, srl->name, sizeof(name_esc)); + return BLI_sprintfN("render.layers[\"%s\"]", name_esc); } static int rna_RenderSettings_multiple_engines_get(PointerRNA *UNUSED(ptr)) diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 4d785611038..e522b73039b 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -342,10 +342,15 @@ static char *rna_SequenceTransform_path(PointerRNA *ptr) Editing *ed = BKE_sequencer_editing_get(scene, FALSE); Sequence *seq = sequence_get_by_transform(ed, ptr->data); - if (seq && seq->name + 2) - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].transform", seq->name + 2); - else + if (seq && seq->name + 2) { + char name_esc[(sizeof(seq->name) - 2) * 2]; + + BLI_strescape(name_esc, seq->name + 2, sizeof(name_esc)); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].transform", name_esc); + } + else { return BLI_strdup(""); + } } static void rna_SequenceTransform_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) @@ -387,10 +392,15 @@ static char *rna_SequenceCrop_path(PointerRNA *ptr) Editing *ed = BKE_sequencer_editing_get(scene, FALSE); Sequence *seq = sequence_get_by_crop(ed, ptr->data); - if (seq && seq->name + 2) - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].crop", seq->name + 2); - else + if (seq && seq->name + 2) { + char name_esc[(sizeof(seq->name) - 2) * 2]; + + BLI_strescape(name_esc, seq->name + 2, sizeof(name_esc)); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].crop", name_esc); + } + else { return BLI_strdup(""); + } } static void rna_SequenceCrop_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) @@ -501,10 +511,15 @@ static char *rna_Sequence_path(PointerRNA *ptr) /* sequencer data comes from scene... * TODO: would be nice to make SequenceEditor data a datablock of its own (for shorter paths) */ - if (seq->name + 2) - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", seq->name + 2); - else + if (seq->name + 2) { + char name_esc[(sizeof(seq->name) - 2) * 2]; + + BLI_strescape(name_esc, seq->name + 2, sizeof(name_esc)); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"]", name_esc); + } + else { return BLI_strdup(""); + } } static PointerRNA rna_SequenceEditor_meta_stack_get(CollectionPropertyIterator *iter) @@ -754,13 +769,23 @@ static char *rna_SequenceColorBalance_path(PointerRNA *ptr) Sequence *seq = sequence_get_by_colorbalance(ed, ptr->data, &smd); if (seq && seq->name + 2) { + char name_esc[(sizeof(seq->name) - 2) * 2]; + + BLI_strescape(name_esc, seq->name + 2, sizeof(name_esc)); + if (!smd) { /* path to old filter color balance */ - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].color_balance", seq->name + 2); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].color_balance", name_esc); } else { /* path to modifier */ - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].modifiers[\"%s\"].color_balance", seq->name + 2, smd->name); + char name_esc[(sizeof(seq->name) - 2) * 2]; + char name_esc_smd[sizeof(smd->name) * 2]; + + BLI_strescape(name_esc, seq->name + 2, sizeof(name_esc)); + BLI_strescape(name_esc_smd, smd->name, sizeof(name_esc_smd)); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].modifiers[\"%s\"].color_balance", + name_esc, name_esc_smd); } } else @@ -895,10 +920,18 @@ static char *rna_SequenceModifier_path(PointerRNA *ptr) SequenceModifierData *smd = ptr->data; Sequence *seq = sequence_get_by_modifier(ed, smd); - if (seq && seq->name + 2) - return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].modifiers[\"%s\"]", seq->name + 2, smd->name); - else + if (seq && seq->name + 2) { + char name_esc[(sizeof(seq->name) - 2) * 2]; + char name_esc_smd[sizeof(smd->name) * 2]; + + BLI_strescape(name_esc, seq->name + 2, sizeof(name_esc)); + BLI_strescape(name_esc_smd, smd->name, sizeof(name_esc_smd)); + return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].modifiers[\"%s\"]", + name_esc, name_esc_smd); + } + else { return BLI_strdup(""); + } } static void rna_SequenceModifier_name_set(PointerRNA *ptr, const char *value) diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index 76f005cdd2b..83a974137e8 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -99,24 +99,30 @@ static char *rna_SmokeDomainSettings_path(PointerRNA *ptr) { SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data; ModifierData *md = (ModifierData *)settings->smd; + char name_esc[sizeof(md->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].domain_settings", md->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].domain_settings", name_esc); } static char *rna_SmokeFlowSettings_path(PointerRNA *ptr) { SmokeFlowSettings *settings = (SmokeFlowSettings *)ptr->data; ModifierData *md = (ModifierData *)settings->smd; + char name_esc[sizeof(md->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].flow_settings", md->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].flow_settings", name_esc); } static char *rna_SmokeCollSettings_path(PointerRNA *ptr) { SmokeCollSettings *settings = (SmokeCollSettings *)ptr->data; ModifierData *md = (ModifierData *)settings->smd; + char name_esc[sizeof(md->name) * 2]; - return BLI_sprintfN("modifiers[\"%s\"].coll_settings", md->name); + BLI_strescape(name_esc, md->name, sizeof(name_esc)); + return BLI_sprintfN("modifiers[\"%s\"].coll_settings", name_esc); } static int rna_SmokeModifier_density_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION]) diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index e57d9586a32..d01eab053bd 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -307,10 +307,15 @@ char *rna_TextureSlot_path(PointerRNA *ptr) } /* this is a compromise for the remaining cases... */ - if (mtex->tex) - return BLI_sprintfN("texture_slots[\"%s\"]", mtex->tex->id.name + 2); - else + if (mtex->tex) { + char name_esc[(sizeof(mtex->tex->id.name) - 2) * 2]; + + BLI_strescape(name_esc, mtex->tex->id.name + 2, sizeof(name_esc)); + return BLI_sprintfN("texture_slots[\"%s\"]", name_esc); + } + else { return BLI_strdup("texture_slots[0]"); + } } static int rna_TextureSlot_name_length(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 6f0478b5eec..d315912eb84 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -82,9 +82,10 @@ static void rna_tracking_defaultSettings_searchUpdate(Main *UNUSED(bmain), Scene static char *rna_trackingTrack_path(PointerRNA *ptr) { - MovieTrackingTrack *track = (MovieTrackingTrack *) ptr->data; - - return BLI_sprintfN("tracking.tracks[\"%s\"]", track->name); + MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data; + char name_esc[sizeof(track->name) * 2]; + BLI_strescape(name_esc, track->name, sizeof(name_esc)); + return BLI_sprintfN("tracking.tracks[\"%s\"]", name_esc); } static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) -- cgit v1.2.3