mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 15:43:32 +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.
|
- Turn "descriptor store" into a full-fledged type.
|
||||||
- Move all NT services code into a separate source file.
|
- Move all NT services code into a separate source file.
|
||||||
- Unify all code that computes medians, percentile elements, etc.
|
- 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
|
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.
|
o Detect whether votes are really all for the same period.
|
||||||
. Push/pull documents as appropriate.
|
. Push/pull documents as appropriate.
|
||||||
- Pull votes and signatures if we don't get them.
|
- 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
|
o Code to keep consensus docs in limbo if they don't have
|
||||||
have enough signatures.
|
have enough signatures.
|
||||||
o Have clients know which authorities are v3 authorities, and what
|
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)
|
router_parse_addr_policy_from_string(const char *s, int assume_action)
|
||||||
{
|
{
|
||||||
directory_token_t *tok = NULL;
|
directory_token_t *tok = NULL;
|
||||||
const char *cp;
|
const char *cp, *eos;
|
||||||
char *tmp = NULL;
|
/* 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;
|
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. */
|
s = eat_whitespace(s);
|
||||||
len = strlen(s);
|
if ((*s == '*' || TOR_ISDIGIT(*s)) && assume_action >= 0) {
|
||||||
cp = tmp = tor_malloc(len+2);
|
if (tor_snprintf(line, sizeof(line), "%s %s",
|
||||||
for (idx = 0; idx < len; ++idx) {
|
assume_action == ADDR_POLICY_ACCEPT?"accept":"reject", s)<0) {
|
||||||
tmp[idx] = TOR_TOLOWER(s[idx]);
|
log_warn(LD_DIR, "Policy %s is too long.", escaped(s));
|
||||||
}
|
return NULL;
|
||||||
tmp[len]='\n';
|
}
|
||||||
tmp[len+1]='\0';
|
cp = line;
|
||||||
while (TOR_ISSPACE(*cp))
|
} else { /* assume an already well-formed address policy line */
|
||||||
++cp;
|
cp = s;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
tor_strlower(line);
|
||||||
|
|
||||||
eos = cp + strlen(cp);
|
eos = cp + strlen(cp);
|
||||||
tok = get_next_token(&cp, eos, routerdesc_token_table);
|
tok = get_next_token(&cp, eos, routerdesc_token_table);
|
||||||
if (tok->tp == _ERR) {
|
if (tok->tp == _ERR) {
|
||||||
@ -2272,7 +2269,6 @@ router_parse_addr_policy_from_string(const char *s, int assume_action)
|
|||||||
err:
|
err:
|
||||||
r = NULL;
|
r = NULL;
|
||||||
done:
|
done:
|
||||||
tor_free(tmp);
|
|
||||||
token_free(tok);
|
token_free(tok);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user