Author: pepeto Date: Thu Jun 26 22:35:49 2014 New Revision: 25279 URL: http://svn.gna.org/viewcvs/freeciv?rev=25279&view=rev Log: Fix pf_map_XXX_iterate() macros since patch #4768 is applied. Also ass many assertions in pf_map_XXX() functions, preventing crashes.
Report by Marko Lindqvist (cazfi@gna) and Andreas Rosdal (andreasr@gna) See gna bug #22230 Modified: trunk/common/aicore/path_finding.c trunk/common/aicore/path_finding.h Modified: trunk/common/aicore/path_finding.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/aicore/path_finding.c?rev=25279&r1=25278&r2=25279&view=diff ============================================================================== --- trunk/common/aicore/path_finding.c (original) +++ trunk/common/aicore/path_finding.c Thu Jun 26 22:35:49 2014 @@ -2852,6 +2852,9 @@ ****************************************************************************/ void pf_map_destroy(struct pf_map *pfm) { +#ifdef PF_DEBUG + fc_assert_ret(NULL != pfm); +#endif pfm->destroy(pfm); } @@ -2862,6 +2865,10 @@ ****************************************************************************/ int pf_map_move_cost(struct pf_map *pfm, struct tile *ptile) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, PF_IMPOSSIBLE_MC); + fc_assert_ret_val(NULL != ptile, PF_IMPOSSIBLE_MC); +#endif return pfm->get_move_cost(pfm, ptile); } @@ -2874,6 +2881,10 @@ ****************************************************************************/ struct pf_path *pf_map_path(struct pf_map *pfm, struct tile *ptile) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, NULL); + fc_assert_ret_val(NULL != ptile, NULL); +#endif return pfm->get_path(pfm, ptile); } @@ -2885,6 +2896,10 @@ bool pf_map_position(struct pf_map *pfm, struct tile *ptile, struct pf_position *pos) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, FALSE); + fc_assert_ret_val(NULL != ptile, FALSE); +#endif return pfm->get_position(pfm, ptile, pos); } @@ -2901,6 +2916,10 @@ ****************************************************************************/ bool pf_map_iterate(struct pf_map *pfm) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, FALSE); +#endif + if (NULL == pfm->tile) { /* The end of the iteration was already reached. Don't try to iterate * again. */ @@ -2927,6 +2946,9 @@ ****************************************************************************/ struct tile *pf_map_iter(struct pf_map *pfm) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, NULL); +#endif return pfm->tile; } @@ -2936,6 +2958,10 @@ ****************************************************************************/ int pf_map_iter_move_cost(struct pf_map *pfm) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, PF_IMPOSSIBLE_MC); + fc_assert_ret_val(NULL != pfm->tile, PF_IMPOSSIBLE_MC); +#endif return pfm->get_move_cost(pfm, pfm->tile); } @@ -2945,6 +2971,10 @@ ****************************************************************************/ struct pf_path *pf_map_iter_path(struct pf_map *pfm) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, NULL); + fc_assert_ret_val(NULL != pfm->tile, NULL); +#endif return pfm->get_path(pfm, pfm->tile); } @@ -2954,6 +2984,10 @@ ****************************************************************************/ void pf_map_iter_position(struct pf_map *pfm, struct pf_position *pos) { +#ifdef PF_DEBUG + fc_assert_ret(NULL != pfm); + fc_assert_ret(NULL != pfm->tile); +#endif if (!pfm->get_position(pfm, pfm->tile, pos)) { /* Always fails. */ fc_assert(pfm->get_position(pfm, pfm->tile, pos)); @@ -2965,6 +2999,9 @@ ****************************************************************************/ const struct pf_parameter *pf_map_parameter(const struct pf_map *pfm) { +#ifdef PF_DEBUG + fc_assert_ret_val(NULL != pfm, NULL); +#endif return &pfm->params; } Modified: trunk/common/aicore/path_finding.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/aicore/path_finding.h?rev=25279&r1=25278&r2=25279&view=diff ============================================================================== --- trunk/common/aicore/path_finding.h (original) +++ trunk/common/aicore/path_finding.h Thu Jun 26 22:35:49 2014 @@ -488,7 +488,8 @@ * which indicate if the start tile should be iterated or * not. */ #define pf_map_tiles_iterate(ARG_pfm, NAME_tile, COND_from_start) \ -if ((COND_from_start) || pf_map_iterate((ARG_pfm))) { \ +if (NULL != pf_map_iter(ARG_pfm) \ + && (COND_from_start || pf_map_iterate((ARG_pfm)))) { \ struct pf_map *_MY_pf_map_ = (ARG_pfm); \ struct tile *NAME_tile; \ do { \ @@ -509,7 +510,8 @@ * not. */ #define pf_map_move_costs_iterate(ARG_pfm, NAME_tile, NAME_cost, \ COND_from_start) \ -if ((COND_from_start) || pf_map_iterate((ARG_pfm))) { \ +if (NULL != pf_map_iter(ARG_pfm) \ + && (COND_from_start || pf_map_iterate((ARG_pfm)))) { \ struct pf_map *_MY_pf_map_ = (ARG_pfm); \ struct tile *NAME_tile; \ int NAME_cost; \ @@ -530,7 +532,8 @@ * which indicate if the start tile should be iterated or * not. */ #define pf_map_positions_iterate(ARG_pfm, NAME_pos, COND_from_start) \ -if ((COND_from_start) || pf_map_iterate((ARG_pfm))) { \ +if (NULL != pf_map_iter(ARG_pfm) \ + && (COND_from_start || pf_map_iterate((ARG_pfm)))) { \ struct pf_map *_MY_pf_map_ = (ARG_pfm); \ struct pf_position NAME_pos; \ do { \ @@ -549,7 +552,8 @@ * which indicate if the start tile should be iterated or * not. */ #define pf_map_paths_iterate(ARG_pfm, NAME_path, COND_from_start) \ -if ((COND_from_start) || pf_map_iterate((ARG_pfm))) { \ +if (NULL != pf_map_iter(ARG_pfm) \ + && (COND_from_start || pf_map_iterate((ARG_pfm)))) { \ struct pf_map *_MY_pf_map_ = (ARG_pfm); \ struct pf_path *NAME_path;\ do {\ _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits