pgbench_verify_varname_20100104.patch
application/octet-stream
Filename: pgbench_verify_varname_20100104.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| contrib/pgbench/pgbench.c | 30 | 10 |
diff -cprN head/contrib/pgbench/pgbench.c work/contrib/pgbench/pgbench.c
*** head/contrib/pgbench/pgbench.c 2010-01-04 09:10:26.638773000 +0900
--- work/contrib/pgbench/pgbench.c 2010-01-04 10:26:43.729385726 +0900
*************** getVariable(CState *st, char *name)
*** 431,436 ****
--- 431,451 ----
return NULL;
}
+ /* check whether the name consists of alphabets, numerals and underscores. */
+ static bool
+ isLegalVariableName(const char *name)
+ {
+ int i;
+
+ for (i = 0; name[i] != '\0'; i++)
+ {
+ if (!isalnum((unsigned char) name[i]) && name[i] != '_')
+ return false;
+ }
+
+ return true;
+ }
+
static int
putVariable(CState *st, char *name, char *value)
{
*************** putVariable(CState *st, char *name, char
*** 452,457 ****
--- 467,482 ----
{
Variable *newvars;
+ /*
+ * Check for the name only when declaring a new variable to avoid
+ * overhead.
+ */
+ if (!isLegalVariableName(name))
+ {
+ fprintf(stderr, "invalid variable name '%s'\n", name);
+ return false;
+ }
+
if (st->variables)
newvars = (Variable *) realloc(st->variables,
(st->nvariables + 1) * sizeof(Variable));
*************** putVariable(CState *st, char *name, char
*** 459,465 ****
newvars = (Variable *) malloc(sizeof(Variable));
if (newvars == NULL)
! return false;
st->variables = newvars;
--- 484,490 ----
newvars = (Variable *) malloc(sizeof(Variable));
if (newvars == NULL)
! goto out_of_memory;
st->variables = newvars;
*************** putVariable(CState *st, char *name, char
*** 493,498 ****
--- 518,527 ----
}
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':
--- 1904,1910 ----
*************** 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);
- }
}
}
}
--- 1985,1991 ----
*************** 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);
- }
}
}
--- 2063,2069 ----