]> granicus.if.org Git - graphviz/commitdiff
Revert "rewrite indexOf"
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 14 Mar 2022 05:27:02 +0000 (22:27 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 19 Mar 2022 17:26:21 +0000 (10:26 -0700)
This reverts commit 84efe93d5c5a4da0e778dbf01ed8550d2d774fdf.

Gitlab: fixes #2211

CHANGELOG.md
lib/gvpr/actions.c
rtest/test_regression.py

index f2510b3afe80bde5a2ce9a0d2840bdda696a086a..8dc35e90d82f4b5eca9000883e640110114379aa 100644 (file)
@@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - spurious "no hard-coded metrics" warnings on labels with empty lines #2179
 - fixed corruption of user shape characteristics during EPSF initialization
 - output formats canon, dot, and xdot are not completely faithful to input #2184
+- gvpr index function produces wrong results #2211. This was a regression in
+  Graphviz 2.47.0.
 
 ## [3.0.0] – 2022-02-26
 
index c2f4b4b3a6513ca5c49909480434dcb80355e9c6..6d2713366200553efda181d7034a1d92a5f2c56d 100644 (file)
@@ -56,8 +56,22 @@ Agraph_t *sameG(void *p1, void *p2, char *fn, char *msg)
  */
 int indexOf(char *s1, char *s2)
 {
-    char *s = strstr(s1, s2);
-    return s == NULL ? -1 : (int)(s1 - s);
+    char c1 = *s2;
+    char c;
+    char *p;
+    int len2;
+
+    if (c1 == '\0')
+       return 0;
+    p = s1;
+    len2 = strlen(s2) - 1;
+    while ((c = *p++)) {
+       if (c != c1)
+           continue;
+       if (strncmp(p, s2 + 1, len2) == 0)
+           return ((p - s1) - 1);
+    }
+    return -1;
 }
 
 /* rindexOf:
index 2bfca5190f6d6f418cd50db4c05ea810a98eec7b..27dd231dc1e9bf621b015741421d01c7b7323faa 100644 (file)
@@ -1563,7 +1563,6 @@ def test_2193():
   assert canonical == new, "canonical translation is not stable"
 
 @pytest.mark.skipif(shutil.which("gvpr") is None, reason="GVPR not available")
-@pytest.mark.xfail(strict=True)
 def test_2211():
   """
   GVPR’s `index` function should return correct results