diff -cprN head/contrib/pgbench/pgbench.c work/contrib/pgbench/pgbench.c *** head/contrib/pgbench/pgbench.c 2009-12-15 16:28:45.231538000 +0900 --- work/contrib/pgbench/pgbench.c 2009-12-28 12:25:08.389037115 +0900 *************** putVariable(CState *st, char *name, char *** 451,456 **** --- 451,482 ---- if (var == NULL) { Variable *newvars; + int i; + + /* + * Check for the name only when declaring a new variable to avoid + * overhead. + */ + for (i = 0; name[i]; i++) + { + if (!isalnum((unsigned char) name[i]) && name[i] != '_') + { + Command **file; + Command *command; + const char *argv0; + + /* Command might not be available during startup. */ + if ((file = sql_files[st->use_file]) != NULL && + (command = file[st->state]) != NULL && + command->argc > 0 && command->argv[0] != NULL) + argv0 = command->argv[0]; + else + argv0 = "(global)"; + + fprintf(stderr, "%s: invalid variable name '%s'\n", argv0, name); + return false; + } + } if (st->variables) newvars = (Variable *) realloc(st->variables, *************** putVariable(CState *st, char *name, char *** 459,465 **** newvars = (Variable *) malloc(sizeof(Variable)); if (newvars == NULL) ! return false; st->variables = newvars; --- 485,491 ---- newvars = (Variable *) malloc(sizeof(Variable)); if (newvars == NULL) ! goto out_of_memory; st->variables = newvars; *************** putVariable(CState *st, char *name, char *** 493,498 **** --- 519,528 ---- } return true; + + out_of_memory: + fprintf(stderr, "Couldn't allocate memory for variable\n"); + return false; } static char * *************** main(int argc, char **argv) *** 1875,1884 **** *p++ = '\0'; if (putVariable(&state[0], optarg, p) == false) - { - fprintf(stderr, "Couldn't allocate memory for variable\n"); exit(1); - } } break; case 'F': --- 1905,1911 ---- *************** main(int argc, char **argv) *** 1959,1968 **** for (j = 0; j < state[0].nvariables; j++) { if (putVariable(&state[i], state[0].variables[j].name, state[0].variables[j].value) == false) - { - fprintf(stderr, "Couldn't allocate memory for variable\n"); exit(1); - } } } } --- 1986,1992 ---- *************** main(int argc, char **argv) *** 2040,2049 **** for (i = 0; i < nclients; i++) { if (putVariable(&state[i], "scale", val) == false) - { - fprintf(stderr, "Couldn't allocate memory for variable\n"); exit(1); - } } } --- 2064,2070 ----