]> granicus.if.org Git - graphviz/commitdiff
cgraph tok: add extra check for duplicate separator characters
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 14 Jul 2022 14:58:17 +0000 (07:58 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 22 Jul 2022 00:41:57 +0000 (17:41 -0700)
When a user supplies the same character more than once when constructing a
tokenizer, nothing is functionally incorrect but this is strong indicator of a
bug or misunderstanding by the caller. For example, a bug like this is
documented in #2259.

lib/cgraph/tokenize.h

index b11010315556f1135181c5d0f930e5305a2a07b5..a881ad12f63702daa9429bb4467fe82727dfe8d7 100644 (file)
@@ -46,6 +46,14 @@ static inline tok_t tok(const char *input, const char *separators) {
   assert(strcmp(separators, "") != 0 &&
          "at least one separator must be provided");
 
+#ifndef NDEBUG
+  for (const char *s1 = separators; *s1 != '\0'; ++s1) {
+    for (const char *s2 = s1 + 1; *s2 != '\0'; ++s2) {
+      assert(*s1 != *s2 && "duplicate separator characters");
+    }
+  }
+#endif
+
   tok_t t = {.start = input, .separators = separators};
 
   // find the end of the first token