FS-3359 --resolve also added %y to printf macros to replace ' with \'

This commit is contained in:
Anthony Minessale 2011-07-07 15:08:16 -05:00
parent 524dc277aa
commit 3b5a0ae50d
3 changed files with 24 additions and 13 deletions

View File

@ -150,9 +150,9 @@ static int lua_parse_and_execute(lua_State * L, char *input_code)
switch_stream_handle_t stream = { 0 }; switch_stream_handle_t stream = { 0 };
SWITCH_STANDARD_STREAM(stream); SWITCH_STANDARD_STREAM(stream);
stream.write_function(&stream, " argv = {[0]='%s', ", input_code); stream.write_function(&stream, " argv = {[0]='%y', ", input_code);
for (x = 0; x < argc; x++) { for (x = 0; x < argc; x++) {
stream.write_function(&stream, "'%s'%s", argv[x], x == argc - 1 ? "" : ", "); stream.write_function(&stream, "'%y'%s", argv[x], x == argc - 1 ? "" : ", ");
} }
stream.write_function(&stream, " };"); stream.write_function(&stream, " };");
code = (char *) stream.data; code = (char *) stream.data;

View File

@ -86,6 +86,7 @@
#endif #endif
#define etPOINTER 15 /* The %p conversion */ #define etPOINTER 15 /* The %p conversion */
#define etSQLESCAPE3 16 #define etSQLESCAPE3 16
#define etSQLESCAPE4 17
/* /*
** An "etByte" is an 8-bit unsigned value. ** An "etByte" is an 8-bit unsigned value.
@ -127,6 +128,7 @@ static const et_info fmtinfo[] = {
{'q', 0, 4, etSQLESCAPE, 0, 0}, {'q', 0, 4, etSQLESCAPE, 0, 0},
{'Q', 0, 4, etSQLESCAPE2, 0, 0}, {'Q', 0, 4, etSQLESCAPE2, 0, 0},
{'w', 0, 4, etSQLESCAPE3, 0, 0}, {'w', 0, 4, etSQLESCAPE3, 0, 0},
{'y', 0, 4, etSQLESCAPE4, 0, 0},
{'c', 0, 0, etCHARX, 0, 0}, {'c', 0, 0, etCHARX, 0, 0},
{'o', 8, 0, etRADIX, 0, 2}, {'o', 8, 0, etRADIX, 0, 2},
{'u', 10, 0, etRADIX, 0, 0}, {'u', 10, 0, etRADIX, 0, 0},
@ -676,6 +678,7 @@ static int vxprintf(void (*func) (void *, const char *, int), /* Consumer of tex
break; break;
case etSQLESCAPE: case etSQLESCAPE:
case etSQLESCAPE2: case etSQLESCAPE2:
case etSQLESCAPE4:
case etSQLESCAPE3:{ case etSQLESCAPE3:{
int i, j, n, ch, isnull; int i, j, n, ch, isnull;
int needQuote; int needQuote;
@ -697,12 +700,20 @@ static int vxprintf(void (*func) (void *, const char *, int), /* Consumer of tex
bufpt = buf; bufpt = buf;
} }
j = 0; j = 0;
if (needQuote) if (needQuote)
bufpt[j++] = '\''; bufpt[j++] = '\'';
for (i = 0; (ch = escarg[i]) != 0; i++) { for (i = 0; (ch = escarg[i]) != 0; i++) {
bufpt[j++] = (char) ch; bufpt[j++] = (char) ch;
if (ch == '\'' || (xtype == etSQLESCAPE3 && ch == '\\')) if (xtype == etSQLESCAPE4) {
bufpt[j++] = (char) ch; if (ch == '\'' || (xtype == etSQLESCAPE3 && ch == '\\')) {
bufpt[j] = (char) ch;
bufpt[j-1] = (char) '\\';
j++;
}
} else {
if (ch == '\'' || (xtype == etSQLESCAPE3 && ch == '\\'))
bufpt[j++] = (char) ch;
}
} }
if (needQuote) if (needQuote)
bufpt[j++] = '\''; bufpt[j++] = '\'';

View File

@ -1940,11 +1940,11 @@ static unsigned int separate_string_char_delim(char *buf, char delim, char **arr
} }
} }
/* strip quotes, escaped chars and leading / trailing spaces */ /* strip quotes, escaped chars and leading / trailing spaces */
if (count > 1) {
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
array[i] = cleanup_separated_string(array[i], delim); array[i] = cleanup_separated_string(array[i], delim);
}
} }
return count; return count;
} }
@ -2000,11 +2000,11 @@ static unsigned int separate_string_blank_delim(char *buf, char **array, unsigne
} }
} }
/* strip quotes, escaped chars and leading / trailing spaces */ /* strip quotes, escaped chars and leading / trailing spaces */
if (count > 1) {
for (i = 0; i < count; ++i) { for (i = 0; i < count; ++i) {
array[i] = cleanup_separated_string(array[i], 0); array[i] = cleanup_separated_string(array[i], 0);
}
} }
return count; return count;
} }