Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-12-10 09:54:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-12-10 09:57:59 +0300
commit83f5a0b972abf2569ca338a268199ab989f33bc7 (patch)
treebd1d312befeda45c6ce70b4173a12cf59cb4fc6b /source/blender/makesrna/intern/rna_access.c
parente21f1136c2dc95ba78b871955e2679b74e42e223 (diff)
Fix missing string escaping in RNA_path_append
This was escaping the '[' character, which isn't needed for quoted text.
Diffstat (limited to 'source/blender/makesrna/intern/rna_access.c')
-rw-r--r--source/blender/makesrna/intern/rna_access.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index deedf72600a..6586cfc7969 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -31,6 +31,7 @@
#include "DNA_scene_types.h"
#include "DNA_windowmanager_types.h"
+#include "BLI_alloca.h"
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
#include "BLI_ghash.h"
@@ -4960,7 +4961,7 @@ static char *rna_path_token(const char **path, char *fixedbuf, int fixedlen, int
int len = 0;
if (bracket) {
- /* get data between [], check escaping ] with \] */
+ /* get data between [], check escaping quotes and back-slashes with #BLI_str_unescape. */
if (**path == '[') {
(*path)++;
}
@@ -5527,8 +5528,7 @@ char *RNA_path_append(
const char *path, PointerRNA *UNUSED(ptr), PropertyRNA *prop, int intkey, const char *strkey)
{
DynStr *dynstr;
- const char *s;
- char appendstr[128], *result;
+ char *result;
dynstr = BLI_dynstr_new();
@@ -5547,22 +5547,15 @@ char *RNA_path_append(
BLI_dynstr_append(dynstr, "[");
if (strkey) {
+ const int strkey_esc_max_size = (strlen(strkey) * 2) + 1;
+ char *strkey_esc = BLI_array_alloca(strkey_esc, strkey_esc_max_size);
+ BLI_str_escape(strkey_esc, strkey, strkey_esc_max_size);
BLI_dynstr_append(dynstr, "\"");
- for (s = strkey; *s; s++) {
- if (*s == '[') {
- appendstr[0] = '\\';
- appendstr[1] = *s;
- appendstr[2] = 0;
- }
- else {
- appendstr[0] = *s;
- appendstr[1] = 0;
- }
- BLI_dynstr_append(dynstr, appendstr);
- }
+ BLI_dynstr_append(dynstr, strkey_esc);
BLI_dynstr_append(dynstr, "\"");
}
else {
+ char appendstr[128];
BLI_snprintf(appendstr, sizeof(appendstr), "%d", intkey);
BLI_dynstr_append(dynstr, appendstr);
}