Skip to content

Commit

Permalink
core: enclose in quotes the value for #!defenvs
Browse files Browse the repository at this point in the history
  • Loading branch information
miconda committed Dec 9, 2021
1 parent 02be5be commit cd2f5d4
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 14 deletions.
8 changes: 8 additions & 0 deletions src/core/cfg.lex
Expand Up @@ -2087,6 +2087,7 @@ int pp_define_env(const char *text, int len, int qmode)
char *r;
str defname;
str defvalue;
str newval;

r = strchr(text, '=');

Expand Down Expand Up @@ -2115,6 +2116,13 @@ int pp_define_env(const char *text, int len, int qmode)
LM_ERR("cannot set define name [%s]\n", (char*)text);
return -1;
}
if(qmode==KSR_PPDEF_QUOTED) {
if(pp_def_qvalue(&defvalue, &newval) < 0) {
LM_ERR("failed to enclose in quotes the value\n");
return -1;
}
defvalue = newval;
}
if(pp_define_set(defvalue.len, defvalue.s, qmode)<0) {
LM_ERR("cannot set define value [%s]\n", (char*)text);
return -1;
Expand Down
42 changes: 28 additions & 14 deletions src/core/ppcfg.c
Expand Up @@ -48,6 +48,31 @@ static pp_subst_rule_t *pp_subst_rules_tail = NULL;
static int _pp_ifdef_level = 0;
static str_list_t *_ksr_substdef_strlist = NULL;

int pp_def_qvalue(str *defval, str *outval)
{
str newval;
str_list_t *sb;

if(pv_get_buffer_size() < defval->len + 4) {
LM_ERR("defined value is too large\n");
return -1;
}
newval.s = pv_get_buffer();
newval.s[0] = '"';
memcpy(newval.s + 1, defval->s, defval->len);
newval.s[defval->len + 1] = '"';
newval.s[defval->len + 2] = '\0';
newval.len = defval->len + 2;
sb = str_list_block_add(&_ksr_substdef_strlist, newval.s, newval.len);
if(sb==NULL) {
LM_ERR("failed to link quoted value [%.*s]\n", defval->len, defval->s);
return -1;
}
*outval = sb->s;

return 0;
}

int pp_subst_add(char *data)
{
struct subst_expr* se;
Expand Down Expand Up @@ -163,22 +188,11 @@ int pp_substdef_add(char *data, int mode)
}
}
if(mode==KSR_PPDEF_QUOTED) {
if(pv_get_buffer_size() < defvalue.len + 4) {
LM_ERR("defined value is too large\n");
return -1;
}
newval.s = pv_get_buffer();
newval.s[0] = '"';
memcpy(newval.s + 1, defvalue.s, defvalue.len);
newval.s[defvalue.len + 1] = '"';
newval.s[defvalue.len + 2] = '\0';
newval.len = defvalue.len + 2;
sb = str_list_block_add(&_ksr_substdef_strlist, newval.s, newval.len);
if(sb==NULL) {
LM_ERR("failed to handle substdef: [%s]\n", data);
if(pp_def_qvalue(&defvalue, &newval) < 0) {
LM_ERR("failed to enclose in quotes the value\n");
return -1;
}
defvalue = sb->s;
defvalue = newval;
}
if(pp_define_set(defvalue.len, defvalue.s, KSR_PPDEF_QUOTED)<0) {
LM_ERR("cannot set define value\n");
Expand Down
2 changes: 2 additions & 0 deletions src/core/ppcfg.h
Expand Up @@ -34,6 +34,8 @@ typedef struct ksr_ppdefine {
int dtype;
} ksr_ppdefine_t;

int pp_def_qvalue(str *defval, str *outval);

str* pp_get_define_name(int idx);
ksr_ppdefine_t* pp_get_define(int idx);

Expand Down

0 comments on commit cd2f5d4

Please sign in to comment.