strescape.c revision 51aceed49d7edcf1ce385d6d97f0acb7067a6608
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen/* Copyright (c) 2003-2016 Dovecot authors, see the included COPYING file */
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen const char *p;
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen /* see if we need to quote it */
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen if (*p == '\0')
283ccfe110ed62e48f36e0d84e47da8cae5106beTimo Sirainen for (; *p != '\0'; p++) {
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenvoid str_append_unescaped(string_t *dest, const void *src, size_t src_size)
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen for (; i < src_size; i++) {
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen /* @UNSAFE */
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainenint str_unescape_next(const char **str, const char **unescaped_r)
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen const char *p;
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen if (*p == '"')
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen else if (*p == '\\') {
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen if (*p != '"')
6246b93fb37890dcb2f4df9896438f3f376ab284Timo Sirainen escaped = p_strdup_until(unsafe_data_stack_pool, *str, p);
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen *unescaped_r = !esc_found ? escaped : str_unescape(escaped);
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainenvoid str_append_tabescaped_n(string_t *dest, const unsigned char *src, size_t src_size)
d6500661eb699ff335ac570c8646b6e067e1aac6Timo Sirainen switch (src[i]) {
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainenvoid str_append_tabescaped(string_t *dest, const char *src) {
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen str_append_tabescaped_n(dest, (const unsigned char*)src, strlen(src));
2a4e8f370c566ffd360922227fc73d0ee36abee7Timo Sirainen const char *p;
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen if (*p <= '\r') {
d6500661eb699ff335ac570c8646b6e067e1aac6Timo Sirainenvoid str_append_tabunescaped(string_t *dest, const void *src, size_t src_size)
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen for (; i < src_size; i++) {
9d7451b57769988f7e3e41cd8790e65429ffc5c7Timo Sirainen switch (src_c[i]) {
start = i;
return start;
str++;
str++;
switch (*str) {
return start;
return str;
char **args;
return args;