From 4558a21571f399558b15f2520d4bec80a21604b9 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Mon, 5 Jul 2010 04:14:10 +0200 Subject: [PATCH] Introduce BOARD_MAX_SIZE compile-time upper limit on board size --- board.c | 1 + board.h | 8 ++++++++ gtp.c | 8 ++++++-- uct/policy/generic.h | 3 ++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/board.c b/board.c index b7ccc8d..2ad0dca 100644 --- a/board.c +++ b/board.c @@ -167,6 +167,7 @@ board_resize(struct board *board, int size) #ifdef BOARD_SIZE assert(board_size(board) == size + 2); #endif + assert(size <= BOARD_MAX_SIZE); board->size = size + 2 /* S_OFFBOARD margin */; board->size2 = board_size(board) * board_size(board); diff --git a/board.h b/board.h index 052cf8e..b1af743 100644 --- a/board.h +++ b/board.h @@ -16,6 +16,10 @@ struct features_gamma; +/* Maximum supported board size. (Without the S_OFFBOARD edges.) */ +#define BOARD_MAX_SIZE 19 + + /* The board implementation has bunch of optional features. * Turn them on below: */ @@ -32,6 +36,10 @@ struct features_gamma; //#define BOARD_GAMMA 1 // incremental probability distribution (requires BOARD_TRAITS, BOARD_PAT3) +#define BOARD_MAX_MOVES (BOARD_MAX_SIZE * BOARD_MAX_SIZE) +#define BOARD_MAX_GROUPS (BOARD_MAX_SIZE * BOARD_MAX_SIZE / 2) + + /* Some engines might normalize their reading and skip symmetrical * moves. We will tell them how can they do it. */ struct board_symmetry { diff --git a/gtp.c b/gtp.c index 9fe6ee8..c6340fe 100644 --- a/gtp.c +++ b/gtp.c @@ -178,8 +178,12 @@ gtp_parse(struct board *board, struct engine *engine, struct time_info *ti, char } else if (!strcasecmp(cmd, "boardsize")) { char *arg; next_tok(arg); - board_resize(board, atoi(arg)); - + int size = atoi(arg); + if (size < 1 || size > BOARD_MAX_SIZE) { + gtp_error(id, "illegal board size", NULL); + return P_OK; + } + board_resize(board, size); gtp_reply(id, NULL); } else if (!strcasecmp(cmd, "clear_board") || !strcasecmp(cmd, "kgs-game_over")) { diff --git a/uct/policy/generic.h b/uct/policy/generic.h index b9adb3b..544f90a 100644 --- a/uct/policy/generic.h +++ b/uct/policy/generic.h @@ -3,6 +3,7 @@ /* Some default policy routines and templates. */ +#include "board.h" #include "stone.h" #include "uct/internal.h" @@ -18,7 +19,7 @@ void uctp_generic_winner(struct uct_policy *p, struct tree *tree, struct uct_des #define uctd_try_node_children(tree, descent, allow_pass, parity, tenuki_d, di, urgency) \ /* Information abound best children. */ \ /* XXX: We assume board <=25x25. */ \ - struct uct_descent dbest[626] = { { .node = descent->node->children, .lnode = NULL } }; int dbests = 1; \ + struct uct_descent dbest[BOARD_MAX_MOVES + 1] = { { .node = descent->node->children, .lnode = NULL } }; int dbests = 1; \ float best_urgency = -9999; \ /* Descent children iterator. */ \ struct uct_descent dci = { .node = descent->node->children, .lnode = descent->lnode ? descent->lnode->children : NULL }; \ -- 2.11.4.GIT