From: Nick Mathewson Date: Thu, 11 Feb 2016 18:21:47 +0000 (-0500) Subject: Handle the case where tor-gencert gets a passphrase with no NL X-Git-Tag: tor-0.2.8.2-alpha~51^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a874d66ea9ddb8c64189f33bb2a9ef05ee74f3fe;p=thirdparty%2Ftor.git Handle the case where tor-gencert gets a passphrase with no NL Closes ticket 17443. --- diff --git a/changes/bug17443 b/changes/bug17443 new file mode 100644 index 0000000000..e4c040b96b --- /dev/null +++ b/changes/bug17443 @@ -0,0 +1,5 @@ + o Minor bugfixes (tor-gencert): + - Correctly handle the case where an authority operator enters a + passphrase but sends an EOF before sending a newline. + Fixes bug 17443; bugfix on 0.2.0.20-rc. Found by "junglefowl". + diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c index e833aa9ef5..4e5e1dc590 100644 --- a/src/tools/tor-gencert.c +++ b/src/tools/tor-gencert.c @@ -96,14 +96,21 @@ load_passphrase(void) { char *cp; char buf[1024]; /* "Ought to be enough for anybody." */ + memset(buf, 0, sizeof(buf)); /* should be needless */ ssize_t n = read_all(passphrase_fd, buf, sizeof(buf), 0); if (n < 0) { log_err(LD_GENERAL, "Couldn't read from passphrase fd: %s", strerror(errno)); return -1; } + /* We'll take everything from the buffer except for optional terminating + * newline. */ cp = memchr(buf, '\n', n); - passphrase_len = cp-buf; + if (cp == NULL) { + passphrase_len = n; + } else { + passphrase_len = cp-buf; + } passphrase = tor_strndup(buf, passphrase_len); memwipe(buf, 0, sizeof(buf)); return 0;