]> granicus.if.org Git - graphviz/commitdiff
fix: Revert "rewrite versionStr2Version to use strtoul"
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 2 Jul 2022 03:23:27 +0000 (20:23 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 4 Jul 2022 19:29:37 +0000 (12:29 -0700)
This reverts commit 5aa56175c4715700cc8bf9fecad7b27665c04379. This commit
inadvertently changed the parsing of the `xdotversion` attribute to make
something like “1.7” parse as version 1.

Gitlab: fixes #358

CHANGELOG.md
plugin/core/gvrender_core_dot.c
tests/test_regression.py

index 3ea59cbb5a8d11e5645d815532a0649c7e02e02b..8779a162f00467643274e5af677e318cbb63fb3e 100644 (file)
@@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - b15.gv crashes dot #827
 - heap overflow in function startElementHandler in gxl2gv.c #2093
 - Crash on assertion #121
+- `xdotversion` attribute is no longer misparsed. This was a regression in
+  Graphviz 2.47.2. #358
 
 ## [4.0.0] – 2022-05-29
 
index 63eb5e5352064aae71f7ef9afc040ed60d42ad77..93e038a87a65b55d648896c2360dd4f7292ed2c9 100644 (file)
@@ -14,7 +14,6 @@
 #include <io.h>
 #endif
 
-#include <limits.h>
 #include <stdarg.h>
 #include <stdbool.h>
 #include <stdlib.h>
@@ -365,14 +364,26 @@ static void xdot_end_cluster(GVJ_t * job)
 }
 
 static unsigned short
-versionStr2Version (const char* str)
+versionStr2Version (char* str)
 {
-  unsigned long u = strtoul(str, NULL, 10);
-  if (u == 0 || u > USHRT_MAX) {
-    agerr(AGWARN, "xdot version \"%s\" too long", str);
-  }
+    char c, buf[BUFSIZ];
+    int n = 0;
+    char* s = str;
+    unsigned short us;
 
-  return (unsigned short)u;
+    while ((c = *s++)) {
+       if (isdigit(c)) {
+           if (n < BUFSIZ-1) buf[n++] = c;
+           else {
+               agerr(AGWARN, "xdot version \"%s\" too long", str);
+               break;
+           }
+       }
+    }
+    buf[n] = '\0';
+    
+    us = atoi(buf);
+    return us;
 }
 
 /* 
index 744ccb87404c2f6555d8f71b95503b37f4257efa..7d97b4e601f2dc8f8f29ddc7b9ef29adb7ca4184 100644 (file)
@@ -307,7 +307,6 @@ def test_191():
 
     assert p.returncode != 0, "syntax error was only a warning, not an error"
 
-@pytest.mark.xfail(strict=True)
 def test_358():
   """
   setting xdot version to 1.7 should enable font characteristics