]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Improve fragile-hardening performance of consensus_split_lines.
authorNick Mathewson <nickm@torproject.org>
Tue, 16 Jan 2018 17:42:40 +0000 (12:42 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 16 Jan 2018 17:42:40 +0000 (12:42 -0500)
For whatever reason, in my testing, using memchr() here improves
performance over strchr() by a great deal.

Fixes bug 24826; bugfix on 0.3.1.1-alpha.

changes/bug24826_031 [new file with mode: 0644]
src/or/consdiff.c

diff --git a/changes/bug24826_031 b/changes/bug24826_031
new file mode 100644 (file)
index 0000000..3d4a661
--- /dev/null
@@ -0,0 +1,4 @@
+  o Minor bugfixes (performance, fragile-hardening):
+    - Improve the performance of our consensus-diff application code when Tor
+      is built with the --enable-fragile-hardening option set. Fixes bug
+      24826; bugfix on  0.3.1.1-alpha.
index 1baa11897c957c0cd4453b39a86b623a9128d3c2..deaf465fe7435a660303184e55ecd74ad77dc030 100644 (file)
@@ -1285,8 +1285,11 @@ consdiff_apply_diff(const smartlist_t *cons1,
 STATIC int
 consensus_split_lines(smartlist_t *out, const char *s, memarea_t *area)
 {
+  const char *end_of_str = s + strlen(s);
+  tor_assert(*end_of_str == '\0');
+
   while (*s) {
-    const char *eol = strchr(s, '\n');
+    const char *eol = memchr(s, '\n', end_of_str - s);
     if (!eol) {
       /* File doesn't end with newline. */
       return -1;