mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 10:12:15 +01:00
r15140@catbus: nickm | 2007-09-18 11:34:54 -0400
Get rid of a needless malloc() when parsing address policies. Original patch from "Some guy on #tor", via arma. Altered to have a sufficiently large buffer, and not use the buffer so much, and to save a strlcpy. svn:r11480
This commit is contained in:
parent
8f75defd33
commit
eee8d750b6
@ -53,6 +53,7 @@ Changes in version 0.2.0.7-alpha - 2007-??-??
|
||||
- Turn "descriptor store" into a full-fledged type.
|
||||
- Move all NT services code into a separate source file.
|
||||
- Unify all code that computes medians, percentile elements, etc.
|
||||
- Get rid of a needless malloc when parsing address policies.
|
||||
|
||||
|
||||
Changes in version 0.1.2.17 - 2007-08-30
|
||||
|
2
doc/TODO
2
doc/TODO
@ -59,7 +59,7 @@ Things we'd like to do in 0.2.0.x:
|
||||
o Detect whether votes are really all for the same period.
|
||||
. Push/pull documents as appropriate.
|
||||
- Pull votes and signatures if we don't get them.
|
||||
- Cache votes and signatures on disk.
|
||||
- Cache votes and signatures on disk?
|
||||
o Code to keep consensus docs in limbo if they don't have
|
||||
have enough signatures.
|
||||
o Have clients know which authorities are v3 authorities, and what
|
||||
|
@ -2232,29 +2232,26 @@ addr_policy_t *
|
||||
router_parse_addr_policy_from_string(const char *s, int assume_action)
|
||||
{
|
||||
directory_token_t *tok = NULL;
|
||||
const char *cp;
|
||||
char *tmp = NULL;
|
||||
const char *cp, *eos;
|
||||
/* Longest possible policy is "accept ffff:ffff:..255/ffff:...255:0-65535".
|
||||
* But note that there can be an arbitrary amount of space between the
|
||||
* accept and the address:mask/port element. */
|
||||
char line[TOR_ADDR_BUF_LEN*2 + 32];
|
||||
addr_policy_t *r;
|
||||
size_t len, idx;
|
||||
const char *eos;
|
||||
|
||||
/* *s might not end with \n, so we need to extend it with one. */
|
||||
len = strlen(s);
|
||||
cp = tmp = tor_malloc(len+2);
|
||||
for (idx = 0; idx < len; ++idx) {
|
||||
tmp[idx] = TOR_TOLOWER(s[idx]);
|
||||
}
|
||||
tmp[len]='\n';
|
||||
tmp[len+1]='\0';
|
||||
while (TOR_ISSPACE(*cp))
|
||||
++cp;
|
||||
if ((*cp == '*' || TOR_ISDIGIT(*cp)) && assume_action >= 0) {
|
||||
char *new_str = tor_malloc(len+10);
|
||||
tor_snprintf(new_str, len+10, "%s %s\n",
|
||||
assume_action == ADDR_POLICY_ACCEPT?"accept":"reject", cp);
|
||||
tor_free(tmp);
|
||||
cp = tmp = new_str;
|
||||
s = eat_whitespace(s);
|
||||
if ((*s == '*' || TOR_ISDIGIT(*s)) && assume_action >= 0) {
|
||||
if (tor_snprintf(line, sizeof(line), "%s %s",
|
||||
assume_action == ADDR_POLICY_ACCEPT?"accept":"reject", s)<0) {
|
||||
log_warn(LD_DIR, "Policy %s is too long.", escaped(s));
|
||||
return NULL;
|
||||
}
|
||||
cp = line;
|
||||
} else { /* assume an already well-formed address policy line */
|
||||
cp = s;
|
||||
}
|
||||
tor_strlower(line);
|
||||
|
||||
eos = cp + strlen(cp);
|
||||
tok = get_next_token(&cp, eos, routerdesc_token_table);
|
||||
if (tok->tp == _ERR) {
|
||||
@ -2272,7 +2269,6 @@ router_parse_addr_policy_from_string(const char *s, int assume_action)
|
||||
err:
|
||||
r = NULL;
|
||||
done:
|
||||
tor_free(tmp);
|
||||
token_free(tok);
|
||||
return r;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user