aboutsummaryrefslogtreecommitdiff
path: root/src/feature/dircache
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-07-10 10:32:09 -0400
committerNick Mathewson <nickm@torproject.org>2018-07-10 10:36:49 -0400
commit951d59d706f116cbfa3d3700d9b342a736a571b2 (patch)
tree0c9f41adf901752750084d77724ff79d56dff5b6 /src/feature/dircache
parent6574d4bd27471c30da934c4d8b82ecbe2b3eab7e (diff)
downloadtor-951d59d706f116cbfa3d3700d9b342a736a571b2.tar.gz
tor-951d59d706f116cbfa3d3700d9b342a736a571b2.zip
Use tor_getline() in dirserv.c to remove its upper line limit.
Closes ticket 26223.
Diffstat (limited to 'src/feature/dircache')
-rw-r--r--src/feature/dircache/dirserv.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/feature/dircache/dirserv.c b/src/feature/dircache/dirserv.c
index 50869c2b96..57de6ab8ed 100644
--- a/src/feature/dircache/dirserv.c
+++ b/src/feature/dircache/dirserv.c
@@ -2606,7 +2606,6 @@ int
dirserv_read_measured_bandwidths(const char *from_file,
smartlist_t *routerstatuses)
{
- char line[512];
FILE *fp = tor_fopen_cloexec(from_file, "r");
int applied_lines = 0;
time_t file_time, now;
@@ -2617,9 +2616,10 @@ dirserv_read_measured_bandwidths(const char *from_file,
* version 1.1.0 */
int line_is_after_headers = 0;
int rv = -1;
+ char *line = NULL;
+ size_t n = 0;
/* Initialise line, so that we can't possibly run off the end. */
- memset(line, 0, sizeof(line));
if (fp == NULL) {
log_warn(LD_CONFIG, "Can't open bandwidth file at configured location: %s",
@@ -2628,7 +2628,7 @@ dirserv_read_measured_bandwidths(const char *from_file,
}
/* If fgets fails, line is either unmodified, or indeterminate. */
- if (!fgets(line, sizeof(line), fp)) {
+ if (tor_getline(&line,&n,fp) <= 0) {
log_warn(LD_DIRSERV, "Empty bandwidth file");
goto err;
}
@@ -2659,7 +2659,7 @@ dirserv_read_measured_bandwidths(const char *from_file,
while (!feof(fp)) {
measured_bw_line_t parsed_line;
- if (fgets(line, sizeof(line), fp) && strlen(line)) {
+ if (tor_getline(&line, &n, fp) >= 0) {
if (measured_bw_line_parse(&parsed_line, line,
line_is_after_headers) != -1) {
/* This condition will be true when the first complete valid bw line
@@ -2682,6 +2682,8 @@ dirserv_read_measured_bandwidths(const char *from_file,
rv = 0;
err:
+ if (line)
+ raw_free(line);
if (fp)
fclose(fp);
return rv;