commit 2ea6826b9be5ae9ffab21b623c4b2a5dfdb365d9
Author:     Laslo Hunhold <[email protected]>
AuthorDate: Sat Jan 8 17:04:35 2022 +0100
Commit:     Laslo Hunhold <[email protected]>
CommitDate: Sat Jan 8 17:04:35 2022 +0100

    Add comment-parameter to benchmark for optional further context
    
    I noticed that the utf8proc-decoder does not handle overlong encodings
    (if I'm not mistaken), which is quite dangerous as you can shadow a
    NUL-byte which can lead to memory corruption and reading (remember
    Heartbleed?).
    
    Signed-off-by: Laslo Hunhold <[email protected]>

diff --git a/benchmark/character.c b/benchmark/character.c
index 7ad2190..626733d 100644
--- a/benchmark/character.c
+++ b/benchmark/character.c
@@ -80,9 +80,9 @@ main(int argc, char *argv[])
        }
 
        printf("%s\n", argv[0]);
-       run_benchmark(libgrapheme, &p, "libgrapheme ", "comparison",
+       run_benchmark(libgrapheme, &p, "libgrapheme ", NULL, "comparison",
                      &baseline, NUM_ITERATIONS, p.bufsiz - 1);
-       run_benchmark(libutf8proc, &p, "libutf8proc ", "comparison",
+       run_benchmark(libutf8proc, &p, "libutf8proc ", NULL, "comparison",
                      &baseline, NUM_ITERATIONS, p.bufsiz - 1);
 
        free(p.buf);
diff --git a/benchmark/utf8-decode.c b/benchmark/utf8-decode.c
index 03722e5..5dc0321 100644
--- a/benchmark/utf8-decode.c
+++ b/benchmark/utf8-decode.c
@@ -107,10 +107,11 @@ main(int argc, char *argv[])
        }
 
        printf("%s\n", argv[0]);
-       run_benchmark(libgrapheme, &p, "libgrapheme ", "byte", &baseline,
-                     NUM_ITERATIONS, p.bufsiz);
-       run_benchmark(libutf8proc, &p, "libutf8proc ", "byte", &baseline,
-                     NUM_ITERATIONS, p.bufsiz);
+       run_benchmark(libgrapheme, &p, "libgrapheme ", NULL,
+                     "byte", &baseline, NUM_ITERATIONS, p.bufsiz);
+       run_benchmark(libutf8proc, &p, "libutf8proc ",
+                     "but unsafe (does not detect overlong encodings)",
+                     "byte", &baseline, NUM_ITERATIONS, p.bufsiz);
 
        free(cpbuf);
        free(p.buf_char);
diff --git a/benchmark/util.c b/benchmark/util.c
index 71a5fe7..4520125 100644
--- a/benchmark/util.c
+++ b/benchmark/util.c
@@ -39,8 +39,9 @@ time_diff(struct timespec *a, struct timespec *b)
 
 void
 run_benchmark(void (*func)(const void *), const void *payload,
-              const char *name, const char *unit, double *baseline,
-              size_t num_iterations, size_t units_per_iteration)
+              const char *name, const char *comment, const char *unit,
+              double *baseline, size_t num_iterations,
+              size_t units_per_iteration)
 {
        struct timespec start, end;
        size_t i;
@@ -66,8 +67,10 @@ run_benchmark(void (*func)(const void *), const void 
*payload,
                *baseline = diff;
                printf(" avg. %.3es/%s (baseline)\n", diff, unit);
        } else {
-               printf(" avg. %.3es/%s (%.2f%% %s)\n", diff, unit,
+               printf(" avg. %.3es/%s (%.2f%% %s%s%s)\n", diff, unit,
                       fabs(1.0 - diff / *baseline) * 100,
-                      (diff < *baseline) ? "faster" : "slower");
+                      (diff < *baseline) ? "faster" : "slower",
+                      comment ? ", " : "",
+                      comment ? comment : "");
        }
 }
diff --git a/benchmark/util.h b/benchmark/util.h
index 7da388b..9159327 100644
--- a/benchmark/util.h
+++ b/benchmark/util.h
@@ -8,6 +8,6 @@
 
 uint_least32_t *generate_test_buffer(const struct test *, size_t, size_t *);
 void run_benchmark(void (*func)(const void *), const void *, const char *,
-                   const char *, double *, size_t, size_t);
+                   const char *, const char *, double *, size_t, size_t);
 
 #endif /* UTIL_H */

Reply via email to