branch: elpa/emacsql commit ab53199d07a28219986ef9453836d53478d4f5e8 Author: Christopher Wellons <well...@nullprogram.com> Commit: Christopher Wellons <well...@nullprogram.com>
Fix escaping issue in middleware. --- sqlite/emacsql.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/sqlite/emacsql.c b/sqlite/emacsql.c index 7e4e680d59..3fcc5655b1 100644 --- a/sqlite/emacsql.c +++ b/sqlite/emacsql.c @@ -6,28 +6,30 @@ #define TRUE 1 #define FALSE 0 -char *dup(const char *s) { - char *copy = malloc(strlen(s)); - while (*s) { - *copy = *s; - copy++; - s++; +char* escape(const char *message) { + int count = 0, length_orig = strlen(message); + for (int i = 0; i < length_orig; i++) { + if (message[i] == '"') { + count++; + } } - return copy; -} - -char *escape(char *message) { + char *copy = malloc(length_orig + count + 1); + char *p = copy; while (*message) { if (*message == '"') { - *message = '\''; + *p = '\\'; + p++; } + *p = *message; message++; + p++; } - return message; + *p = '\0'; + return copy; } void send_error(int code, const char *message) { - char *escaped = escape(dup(message)); + char *escaped = escape(message); printf("error %d \"%s\"\n", code, escaped); free(escaped); }