Blame pioneers-0.11.3-CVE2007-6010.patch
|
|
208417e |
--- trunk/pioneers/common/state.c 2007/10/07 17:58:14 1343
|
|
|
208417e |
+++ trunk/pioneers/common/state.c 2007/11/22 21:21:01 1360
|
|
|
208417e |
@@ -71,7 +71,11 @@
|
|
|
208417e |
StateFunc curr_state;
|
|
|
208417e |
gpointer user_data;
|
|
|
208417e |
|
|
|
208417e |
- curr_state = sm_current(sm);
|
|
|
208417e |
+ if (sm->stack_ptr >= 0)
|
|
|
208417e |
+ curr_state = sm_current(sm);
|
|
|
208417e |
+ else
|
|
|
208417e |
+ curr_state = NULL;
|
|
|
208417e |
+
|
|
|
208417e |
user_data = sm->user_data;
|
|
|
208417e |
if (user_data == NULL)
|
|
|
208417e |
user_data = sm;
|
|
|
208417e |
@@ -89,16 +93,18 @@
|
|
|
208417e |
|
|
|
208417e |
switch (event) {
|
|
|
208417e |
case SM_ENTER:
|
|
|
208417e |
- curr_state(user_data, event);
|
|
|
208417e |
+ if (curr_state != NULL)
|
|
|
208417e |
+ curr_state(user_data, event);
|
|
|
208417e |
break;
|
|
|
208417e |
case SM_INIT:
|
|
|
208417e |
- curr_state(user_data, event);
|
|
|
208417e |
+ if (curr_state != NULL)
|
|
|
208417e |
+ curr_state(user_data, event);
|
|
|
208417e |
if (!sm->is_dead && sm->global !=NULL)
|
|
|
208417e |
sm->global (user_data, event);
|
|
|
208417e |
break;
|
|
|
208417e |
case SM_RECV:
|
|
|
208417e |
sm_cancel_prefix(sm);
|
|
|
208417e |
- if (curr_state(user_data, event))
|
|
|
208417e |
+ if (curr_state != NULL && curr_state(user_data, event))
|
|
|
208417e |
break;
|
|
|
208417e |
sm_cancel_prefix(sm);
|
|
|
208417e |
if (!sm->is_dead
|
|
|
208417e |
@@ -112,7 +118,8 @@
|
|
|
208417e |
case SM_NET_CLOSE:
|
|
|
208417e |
sm_close(sm);
|
|
|
208417e |
default:
|
|
|
208417e |
- curr_state(user_data, event);
|
|
|
208417e |
+ if (curr_state != NULL)
|
|
|
208417e |
+ curr_state(user_data, event);
|
|
|
208417e |
if (!sm->is_dead && sm->global !=NULL)
|
|
|
208417e |
sm->global (user_data, event);
|
|
|
208417e |
break;
|