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

Reply via email to