gnugo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnugo-devel] Array bound violation in 3.1.10


From: Teun Burgers
Subject: [gnugo-devel] Array bound violation in 3.1.10
Date: Mon, 15 Oct 2001 18:34:24 +0200

This patch fixes an array bound violation
due to a bug in draw_back

- bugfix in draw_back
- Add ON_BOARD1 assertions in liberty_of_string
  and neighbour_of_string

Teun
diff -ru gnugo-3.1.10/engine/board.c gx310x/engine/board.c
--- gnugo-3.1.10/engine/board.c Sat Oct 13 15:56:12 2001
+++ gx310x/engine/board.c       Mon Oct 15 12:45:42 2001
@@ -1664,6 +1664,8 @@
 int
 liberty_of_string(int pos, int str)
 {
+  ASSERT_ON_BOARD1(pos);
+  ASSERT_ON_BOARD1(str);
   if (IS_STONE(board[pos]))
     return 0;
 
@@ -1681,6 +1683,8 @@
   int s;
   int color = board[str];
 
+  ASSERT_ON_BOARD1(str);
+  ASSERT_ON_BOARD1(pos);
   ASSERT1(IS_STONE(color), str);
 
   if (!strings_initialized)
diff -ru gnugo-3.1.10/engine/reading.c gx310x/engine/reading.c
--- gnugo-3.1.10/engine/reading.c       Sat Oct 13 02:21:43 2001
+++ gx310x/engine/reading.c     Mon Oct 15 12:53:07 2001
@@ -4194,10 +4194,14 @@
     findlib(adjs[r], 2, libs);
     for (k = 0; k < 2; k++) {
       if (!liberty_of_string(libs[k], str)
-         && (liberty_of_string(SOUTH(libs[k]), str)
-             || liberty_of_string(WEST(libs[k]), str)
-             || liberty_of_string(NORTH(libs[k]), str)
-             || liberty_of_string(EAST(libs[k]), str))) {
+            && ((ON_BOARD1(SOUTH(libs[k]))
+                    && liberty_of_string(SOUTH(libs[k]), str))
+             || (ON_BOARD1(WEST(libs[k]))
+                    && liberty_of_string(WEST(libs[k]), str))
+             || (ON_BOARD1(NORTH(libs[k]))
+                    && liberty_of_string(NORTH(libs[k]), str))
+             || (ON_BOARD1(EAST(libs[k]))
+                    && liberty_of_string(EAST(libs[k]), str)))) {
        if (trymove(libs[k], OTHER_COLOR(board[str]), "draw_back", str,
                    komaster, kom_pos)) {
          int dcode = do_find_defense(str, NULL, komaster, kom_pos);


reply via email to

[Prev in Thread] Current Thread [Next in Thread]