[Bf-blender-cvs] [9e3bfd92107] master: IDProp API: use stored string length for IDP_repr

Campbell Barton noreply at git.blender.org
Sun May 6 08:58:33 CEST 2018


Commit: 9e3bfd92107f3b69e4d1a05ee9cfb9ce00c1ad80
Author: Campbell Barton
Date:   Sun May 6 08:45:54 2018 +0200
Branches: master
https://developer.blender.org/rB9e3bfd92107f3b69e4d1a05ee9cfb9ce00c1ad80

IDProp API: use stored string length for IDP_repr

Also NULL check ID pointers.

===================================================================

M	source/blender/blenkernel/intern/idprop_utils.c

===================================================================

diff --git a/source/blender/blenkernel/intern/idprop_utils.c b/source/blender/blenkernel/intern/idprop_utils.c
index 21005da2d97..449ecee93d9 100644
--- a/source/blender/blenkernel/intern/idprop_utils.c
+++ b/source/blender/blenkernel/intern/idprop_utils.c
@@ -96,23 +96,21 @@ static void idp_str_append_escape(struct ReprState *state, const char *str, cons
 static void idp_repr_fn_recursive(struct ReprState *state, const IDProperty *prop)
 {
 	/* Note: 'strlen' will be calculated at compile time for literals. */
-#define STR_APPEND_STR(str) { \
-	state->str_append_fn(state->user_data, str, (uint)strlen(str)); \
-} ((void)0)
+#define STR_APPEND_STR(str)     state->str_append_fn(state->user_data, str, (uint)strlen(str))
 
-#define STR_APPEND_STR_QUOTE(str) { \
-	idp_str_append_escape(state, str, (uint)strlen(str), true); \
-} ((void)0)
+#define STR_APPEND_STR_QUOTE(str)               idp_str_append_escape(state, str, (uint)strlen(str), true)
+#define STR_APPEND_STR_LEN_QUOTE(str, str_len)  idp_str_append_escape(state, str, str_len, true)
 
-#define STR_APPEND_FMT(format, ...) { \
-	const uint len = (uint)BLI_snprintf_rlen(state->buf, sizeof(state->buf), format, __VA_ARGS__); \
-	state->str_append_fn(state->user_data, state->buf, len); \
-} ((void)0)
+#define STR_APPEND_FMT(format, ...) \
+	state->str_append_fn( \
+	        state->user_data, \
+	        state->buf, \
+	        (uint)BLI_snprintf_rlen(state->buf, sizeof(state->buf), format, __VA_ARGS__))
 
 	switch (prop->type) {
 		case IDP_STRING:
 		{
-			STR_APPEND_STR_QUOTE(IDP_String(prop));
+			STR_APPEND_STR_LEN_QUOTE(IDP_String(prop), (uint)MAX2(0, prop->len - 1));
 			break;
 		}
 		case IDP_INT:
@@ -191,11 +189,16 @@ static void idp_repr_fn_recursive(struct ReprState *state, const IDProperty *pro
 		case IDP_ID:
 		{
 			const ID *id = prop->data.pointer;
-			STR_APPEND_STR("bpy.data.");
-			STR_APPEND_STR(BKE_idcode_to_name_plural(GS(id->name)));
-			STR_APPEND_STR("[");
-			STR_APPEND_STR_QUOTE(id->name + 2);
-			STR_APPEND_STR("]");
+			if (id != NULL) {
+				STR_APPEND_STR("bpy.data.");
+				STR_APPEND_STR(BKE_idcode_to_name_plural(GS(id->name)));
+				STR_APPEND_STR("[");
+				STR_APPEND_STR_QUOTE(id->name + 2);
+				STR_APPEND_STR("]");
+			}
+			else {
+				STR_APPEND_STR("None");
+			}
 			break;
 		}
 		default:
@@ -207,6 +210,7 @@ static void idp_repr_fn_recursive(struct ReprState *state, const IDProperty *pro
 
 #undef STR_APPEND_STR
 #undef STR_APPEND_STR_QUOTE
+#undef STR_APPEND_STR_LEN_QUOTE
 #undef STR_APPEND_FMT
 
 }



More information about the Bf-blender-cvs mailing list