Changeset: c955dafbb941 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c955dafbb941
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: Jul2021
Log Message:

Escape variable names, otherwise names with delimiters could potentially 
conflict


diffs (39 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1907,26 +1907,26 @@ exp2bin_args(backend *be, sql_exp *e, li
                } else if (e->f) {
                        return exps2bin_args(be, e->f, args);
                } else if (e->r) {
-                       char *nme;
                        sql_var_name *vname = (sql_var_name*) e->r;
+                       const char *nme = sql_escape_ident(sql->sa, 
vname->name);
+                       char *buf = NULL;
 
                        if (vname->sname) { /* Global variable */
-                               nme = SA_NEW_ARRAY(be->mvc->sa, char, 
strlen(vname->sname) + strlen(vname->name) + 5);
-                               if (!nme)
+                               const char *sname = sql_escape_ident(sql->sa, 
vname->sname);
+                               if (!nme || !sname || !(buf = 
SA_NEW_ARRAY(be->mvc->sa, char, strlen(sname) + strlen(nme) + 6)))
                                        return NULL;
-                               stpcpy(stpcpy(stpcpy(stpcpy(nme, "A0%"), 
vname->sname), "%"), vname->name); /* mangle variable name */
+                               stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "0\""), 
sname), "\"\""), nme), "\""); /* escape variable name */
                        } else { /* Parameter or local variable */
                                char levelstr[16];
                                snprintf(levelstr, sizeof(levelstr), "%u", 
e->flag);
-                               nme = SA_NEW_ARRAY(be->mvc->sa, char, 
strlen(levelstr) + strlen(vname->name) + 3);
-                               if (!nme)
+                               if (!nme || !(buf = SA_NEW_ARRAY(be->mvc->sa, 
char, strlen(levelstr) + strlen(nme) + 3)))
                                        return NULL;
-                               stpcpy(stpcpy(stpcpy(stpcpy(nme, "A"), 
levelstr), "%"), vname->name); /* mangle variable name */
+                               stpcpy(stpcpy(stpcpy(stpcpy(buf, levelstr), 
"\""), nme), "\""); /* escape variable name */
                        }
-                       if (!list_find(args, nme, (fcmp)&alias_cmp)) {
+                       if (!list_find(args, buf, (fcmp)&alias_cmp)) {
                                stmt *s = stmt_var(be, vname->sname, 
vname->name, &e->tpe, 0, 0);
 
-                               s = stmt_alias(be, s, NULL, sa_strdup(sql->sa, 
nme));
+                               s = stmt_alias(be, s, NULL, sa_strdup(sql->sa, 
buf));
                                list_append(args, s);
                        }
                }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to