From 933cc3d7d9ac86dfdbecb23a8a9ff9c650a75aa7 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer <mschiffer@universe-factory.net> Date: Fri, 23 Feb 2018 00:34:06 +0100 Subject: [PATCH] gluon-web: use ' instead of " for strings in generated Lua code We need a bit less escaping this way. --- package/gluon-web/src/template_parser.c | 10 ++++----- package/gluon-web/src/template_utils.c | 27 +++++++++++-------------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/package/gluon-web/src/template_parser.c b/package/gluon-web/src/template_parser.c index a0efcf4de..b69a99b39 100644 --- a/package/gluon-web/src/template_parser.c +++ b/package/gluon-web/src/template_parser.c @@ -73,12 +73,12 @@ struct template_parser { /* leading and trailing code for different types */ static const char *const gen_code[][2] = { [T_TYPE_INIT] = {NULL, NULL}, - [T_TYPE_TEXT] = {"write(\"", "\")"}, + [T_TYPE_TEXT] = {"write('", "')"}, [T_TYPE_COMMENT] = {NULL, NULL}, - [T_TYPE_EXPR] = {"write(tostring(", " or \"\"))"}, - [T_TYPE_INCLUDE] = {"include(\"", "\")"}, - [T_TYPE_I18N] = {"write(\"", "\")"}, - [T_TYPE_I18N_RAW] = {"write(\"", "\")"}, + [T_TYPE_EXPR] = {"write(tostring(", " or ''))"}, + [T_TYPE_INCLUDE] = {"include('", "')"}, + [T_TYPE_I18N] = {"write('", "')"}, + [T_TYPE_I18N_RAW] = {"write('", "')"}, [T_TYPE_CODE] = {NULL, " "}, [T_TYPE_EOF] = {NULL, NULL}, }; diff --git a/package/gluon-web/src/template_utils.c b/package/gluon-web/src/template_utils.c index 5f4211fc6..7bd0f7098 100644 --- a/package/gluon-web/src/template_utils.c +++ b/package/gluon-web/src/template_utils.c @@ -267,8 +267,7 @@ char * pcdata(const char *s, size_t l, size_t *outl) if (!buf) return NULL; - for (o = 0; o < l; o++) - { + for (o = 0; o < l; o++) { /* Invalid XML bytes */ if ((*ptr <= 0x08) || ((*ptr >= 0x0B) && (*ptr <= 0x0C)) || @@ -279,11 +278,11 @@ char * pcdata(const char *s, size_t l, size_t *outl) } /* Escapes */ - else if ((*ptr == 0x26) || - (*ptr == 0x27) || - (*ptr == 0x22) || - (*ptr == 0x3C) || - (*ptr == 0x3E)) + else if ((*ptr == '\'') || + (*ptr == '"') || + (*ptr == '&') || + (*ptr == '<') || + (*ptr == '>')) { esl = snprintf(esq, sizeof(esq), "&#%i;", *ptr); @@ -319,26 +318,24 @@ void luastr_escape(struct template_buffer *out, const char *s, size_t l, bool es char esq[8]; const char *ptr; - for (ptr = s; ptr < (s + l); ptr++) - { - switch (*ptr) - { + for (ptr = s; ptr < (s + l); ptr++) { + switch (*ptr) { case '\\': buf_append(out, "\\\\", 2); break; - case '"': + case '\'': if (escape_xml) - buf_append(out, """, 5); + buf_append(out, "'", 5); else - buf_append(out, "\\\"", 2); + buf_append(out, "\\\'", 2); break; case '\n': buf_append(out, "\\n", 2); break; - case '\'': + case '"': case '&': case '<': case '>': -- GitLab