@@ -39,10 +39,15 @@
39 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <stdlib.h>
40 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <ctype.h>
41 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <string.h>
42 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <assert.h>
43 43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Debugging switch
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int eVerbose = 0;
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
44 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
45 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Malloc, aborting if it fails.
46 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
47 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *safe_malloc(int nByte){
48 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *x = malloc(nByte);
@@ -198,10 +203,32 @@
198 203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
199 204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char *skip_space(const char *z){
200 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( isspace(z[0]) ){ z++; }
201 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return z;
202 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Remove excess whitespace and nested "()" from string z.
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *simplify_expr(char *z){
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = (int)strlen(z);
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( n>0 ){
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isspace(z[0]) ){
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z++;
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n--;
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0]=='(' && z[n-1]==')' ){
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z++;
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n -= 2;
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[n] = 0;
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return z;
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
203 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
204 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
205 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the input is a string literal.
206 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
207 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int is_string_lit(const char *z){
@@ -268,11 +295,11 @@
268 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
269 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
270 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the input is an argument that is safe to use with %s
271 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** while building an SQL statement.
272 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int is_s_safe(const char *z){
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int is_sql_safe(const char *z){
274 301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int len, eType;
275 302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
276 303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
277 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A string literal is safe for use with %s */
278 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( is_string_lit(z) ) return 1;
@@ -297,15 +324,29 @@
297 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** let it through */
298 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strstr(z, "/*safe-for-%s*/")!=0 ) return 1;
299 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
300 327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
301 328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the input is an argument that is never safe for use
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with %s.
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int never_safe(const char *z){
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strstr(z,"/*safe-for-%s*/")!=0 ) return 0;
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0]=='P' ) return 1; /* CGI macros like P() and PD() */
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(z,"cgi_param",9)==0 ) return 1;
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
302 340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
303 341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
304 342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Processing flags
305 343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define FMT_NO_S 0x00001 /* Do not allow %s substitutions */
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FMT_SQL 0x00001 /* Generates SQL text */
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FMT_HTML 0x00002 /* Generates HTML text */
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FMT_URL 0x00004 /* Generates URLs */
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FMT_SAFE 0x00008 /* Always safe for %s */
307 348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
308 349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
309 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A list of internal Fossil interfaces that take a printf-style format
310 351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** string.
311 352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -313,55 +354,55 @@
313 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFName; /* Name of the function */
314 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iFmtArg; /* Index of format argument. Leftmost is 1. */
315 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned fmtFlags; /* Processing flags */
316 357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} aFmtFunc[] = {
317 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "admin_log", 1, 0 },
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "blob_append_sql", 2, FMT_NO_S },
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "blob_append_sql", 2, FMT_SQL },
319 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "blob_appendf", 2, 0 },
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "cgi_debug", 1, 0 },
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "cgi_panic", 1, 0 },
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "cgi_printf", 1, 0 },
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "cgi_redirectf", 1, 0 },
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "chref", 2, 0 },
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_blob", 2, FMT_NO_S },
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_debug", 1, FMT_NO_S },
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_double", 2, FMT_NO_S },
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "cgi_debug", 1, FMT_SAFE },
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "cgi_panic", 1, FMT_SAFE },
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "cgi_printf", 1, FMT_HTML },
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "cgi_redirectf", 1, FMT_URL },
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "chref", 2, FMT_URL },
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_blob", 2, FMT_SQL },
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_debug", 1, FMT_SQL },
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_double", 2, FMT_SQL },
328 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "db_err", 1, 0 },
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_exists", 1, FMT_NO_S },
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_exists", 1, FMT_SQL },
330 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "db_get_mprintf", 2, 0 },
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_int", 2, FMT_NO_S },
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_int64", 2, FMT_NO_S },
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_multi_exec", 1, FMT_NO_S },
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_optional_sql", 2, FMT_NO_S },
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_prepare", 2, FMT_NO_S },
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_prepare_ignore_error", 2, FMT_NO_S },
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_int", 2, FMT_SQL },
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_int64", 2, FMT_SQL },
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_multi_exec", 1, FMT_SQL },
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_optional_sql", 2, FMT_SQL },
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_prepare", 2, FMT_SQL },
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_prepare_ignore_error", 2, FMT_SQL },
337 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "db_set_mprintf", 3, 0 },
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_static_prepare", 2, FMT_NO_S },
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "db_text", 2, FMT_NO_S },
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_static_prepare", 2, FMT_SQL },
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "db_text", 2, FMT_SQL },
340 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "db_unset_mprintf", 2, 0 },
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "form_begin", 2, 0 },
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_error", 2, 0 },
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_errorlog", 1, 0 },
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_fatal", 1, 0 },
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_fatal_recursive", 1, 0 },
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_panic", 1, 0 },
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_print", 1, 0 },
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_trace", 1, 0 },
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "fossil_warning", 1, 0 },
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "href", 1, 0 },
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "form_begin", 2, FMT_URL },
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_error", 2, FMT_SAFE },
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_errorlog", 1, FMT_SAFE },
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_fatal", 1, FMT_SAFE },
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_fatal_recursive", 1, FMT_SAFE },
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_panic", 1, FMT_SAFE },
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_print", 1, FMT_SAFE },
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_trace", 1, FMT_SAFE },
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "fossil_warning", 1, FMT_SAFE },
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "href", 1, FMT_URL },
351 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "json_new_string_f", 1, 0 },
352 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "json_set_err", 2, 0 },
353 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "json_warn", 2, 0 },
354 395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "mprintf", 1, 0 },
355 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "socket_set_errmsg", 1, 0 },
356 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "ssl_set_errmsg", 1, 0 },
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "style_header", 1, 0 },
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "style_set_current_page", 1, 0 },
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "style_submenu_element", 2, 0 },
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "style_submenu_sql", 3, 0 },
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "webpage_error", 1, 0 },
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "xhref", 2, 0 },
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "style_header", 1, FMT_HTML },
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "style_set_current_page", 1, FMT_URL },
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "style_submenu_element", 2, FMT_URL },
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "style_submenu_sql", 3, FMT_SQL },
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "webpage_error", 1, FMT_SAFE },
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "xhref", 2, FMT_URL },
363 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
364 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
365 406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
366 407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Determine if the indentifier zIdent of length nIndent is a Fossil
367 408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** internal interface that uses a printf-style argument. Return zero if not.
@@ -464,16 +505,17 @@
464 505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCopy[len] = 0;
465 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azArg = 0;
466 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nArg = 0;
467 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = zCopy;
468 509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( z[0] ){
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char cEnd;
469 511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
len = distance_to(z, ',');
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- azArg = safe_realloc((char*)azArg, (sizeof(azArg[0])+1)*(nArg+1));
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- azArg[nArg++] = skip_space(z);
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z[len]==0 ) break;
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cEnd = z[len];
473 513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[len] = 0;
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=len-1; i>0 && isspace(z[i]); i--){ z[i] = 0; }
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ azArg = safe_realloc((char*)azArg, (sizeof(azArg[0])+1)*(nArg+1));
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ azArg[nArg++] = simplify_expr(z);
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cEnd==0 ) break;
475 517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z += len + 1;
476 518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
477 519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
acType = (char*)&azArg[nArg];
478 520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fmtArg>nArg ){
479 521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("%s:%d: too few arguments to %.*s()\n",
@@ -492,28 +534,37 @@
492 534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("%s:%d: too %s arguments to %.*s() "
493 535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"- got %d and expected %d\n",
494 536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFilename, lnFCall, (nArg<fmtArg+k ? "few" : "many"),
495 537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
szFName, zFCall, nArg, fmtArg+k);
496 538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nErr++;
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( fmtFlags & FMT_NO_S ){
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( (fmtFlags & FMT_SAFE)==0 ){
498 540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nArg && i<k; i++){
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (acType[i]=='s' || acType[i]=='z' || acType[i]=='b')
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && !is_s_safe(azArg[fmtArg+i])
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%s:%d: Argument %d to %.*s() not safe for SQL\n",
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zFilename, lnFCall, i+fmtArg, szFName, zFCall);
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nErr++;
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (acType[i]=='s' || acType[i]=='z' || acType[i]=='b') ){
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zExpr = azArg[fmtArg+i];
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( never_safe(zExpr) ){
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("%s:%d: Argument %d to %.*s() is not safe for"
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " a query parameter\n",
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zFilename, lnFCall, i+fmtArg, szFName, zFCall);
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nErr++;
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( (fmtFlags & FMT_SQL)!=0 && !is_sql_safe(zExpr) ){
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("%s:%d: Argument %d to %.*s() not safe for SQL\n",
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zFilename, lnFCall, i+fmtArg, szFName, zFCall);
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nErr++;
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
505 554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
506 555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
507 556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
508 557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
509 558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nErr ){
510 559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nArg; i++){
511 560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf(" arg[%d]: %s\n", i, azArg[i]);
512 561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( eVerbose>1 ){
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("%s:%d: %.*s() ok for %d arguments\n",
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zFilename, lnFCall, szFName, zFCall, nArg);
513 565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
515 566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free((char*)azArg);
516 567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zCopy);
517 568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nErr;
518 569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
519 570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -563,16 +614,24 @@
563 614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
564 615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
565 616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
566 617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check for format-string design rule violations on all files listed
567 618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on the command-line.
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The eVerbose global variable is incremented with each "-v" argument.
568 621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
569 622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int main(int argc, char **argv){
570 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
571 624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nErr = 0;
572 625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<argc; i++){
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zFile = read_file(argv[i]);
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zFile;
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(argv[i],"-v")==0 ){
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eVerbose++;
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eVerbose>0 ) printf("Processing %s...\n", argv[i]);
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zFile = read_file(argv[i]);
574 633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nErr += scan_file(argv[i], zFile);
575 634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zFile);
576 635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
577 636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nErr;
578 637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
579 638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!