]> granicus.if.org Git - graphviz/commitdiff
fix incorrect clearing of bits in bitarray
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 11 Feb 2022 10:40:22 +0000 (21:40 +1100)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 14 Feb 2022 21:41:13 +0000 (08:41 +1100)
The wrong bitwise operations were used here, resulting in e.g. a set of bit 2 of
of `0b011000` updating to `0b011100` instead of being a no-op.

This bug was present since the first introduction of this interface in
3ced90bd756bb8e56920620f2686e0ba6b482bbb, but this has not yet made it into a
release.

lib/cgraph/bitarray.h
rtest/test_regression.py

index bf956427501cc01681dbadec4ef6ffabd24f6dc8..6aa7fb7d7408bf8d0871751657f64ccb215251e3 100644 (file)
@@ -113,7 +113,7 @@ static inline void bitarray_set(bitarray_t *self, size_t index, bool value) {
   if (value) {
     base[index / 8] |= (uint8_t)(UINT8_C(1) << (index % 8));
   } else {
-    base[index / 8] ^= (uint8_t)(UINT8_C(1) << (index % 8));
+    base[index / 8] &= (uint8_t)~(UINT8_C(1) << (index % 8));
   }
 }
 
index 7f203084c27ed425f5230543add650568af59942..01128fa9f28347fe3d202d1ac92fd43031a944b6 100644 (file)
@@ -1516,7 +1516,6 @@ def test_gvmap_fclose():
   # pass this through gvmap
   subprocess.run(["gvmap"], input=input.encode("utf-8"), check=True)
 
-@pytest.mark.xfail(strict=True) # FIXME
 def test_bitarray():
   """run the bitarray unit tests"""