View Issue Details

IDProjectCategoryView StatusLast Update
0002106FSSCPmultiplayerpublic2010-02-12 06:44
Reportersausage Assigned Tokarajorma  
PrioritynormalSeveritycrashReproducibilityalways
Status resolvedResolutionfixed 
Product Version3.6.10 
Fixed in Version3.6.11 
Summary0002106: set-object-position crashes in multiplayer
DescriptionWhen using the set-object-position SEXP in dogfight multiplayer, when the event occurs, the FreeSpace application crashes.

The co-ordinates chosen does not matter: 0,0,0 9999,9999,9999 32000,32000,32000 all will crash.

Tried it on two machines, one being nVidia based and one being Intel 965 based. Both crash.

Also tried it using a 3.6.11 nightly windows build. Same crash.
Additional InformationSee the attached example mission. Only one player in multiplayer map. If the Alpha 1 gets within 50 metres of the enemy object, the SEXP triggers and the windows application crashes.
TagsNo tags attached.

Activities

2010-01-28 22:42

 

testteleport.fs2 (4,038 bytes)

FUBAR-BDHR

2010-01-28 23:50

developer   ~0011598

Confirmed. Quick looks it seems as if it assumes the first 12 ships are player ships instead of checking to see if they are player ships. So it's trying to move a player object that isn't a player object.

Also that test mission was a bit buggy (and I found another code bug in testing it). Attaching working version.

Call stack:

> fs2_open_3_6_11d_INF_SSE2.exe!multi_oo_send_changed_object(object * changedobj=0x010066b8) Line 1524 + 0x12 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!sexp_set_object_position(int n=-1) Line 5818 + 0x9 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!eval_sexp(int cur_node=10, int referenced_node=-1) Line 17328 + 0x9 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!eval_when(int n=9, int use_arguments=0) Line 7153 + 0xb bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!eval_sexp(int cur_node=2, int referenced_node=-1) Line 16761 + 0x16 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!mission_process_event(int event=0) Line 913 + 0xb bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!mission_eval_goals() Line 1062 + 0x9 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!game_simulation_frame() Line 4309 C++
     fs2_open_3_6_11d_INF_SSE2.exe!game_frame(int paused=0) Line 4748 C++
     fs2_open_3_6_11d_INF_SSE2.exe!game_do_frame() Line 5179 + 0x7 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!game_do_state(int state=2) Line 6947 C++
     fs2_open_3_6_11d_INF_SSE2.exe!gameseq_process_events() Line 405 + 0x14 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!game_main(char * cmdline=0x00151f14) Line 7517 + 0x5 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!WinMain(HINSTANCE__ * hInst=0x00400000, HINSTANCE__ * hPrev=0x00000000, char * szCmdLine=0x00151f14, int nCmdShow=1) Line 7597 + 0x9 bytes C++
     fs2_open_3_6_11d_INF_SSE2.exe!__tmainCRTStartup() Line 263 + 0x2c bytes C
     fs2_open_3_6_11d_INF_SSE2.exe!WinMainCRTStartup() Line 182 C
     kernel32.dll!7c817077()
     [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]


Autos:

- Net_players 0x02224238 struct net_player * Net_players {m_player=0x014add00 player_id=0 tracker_player_id=47732 ...} net_player [12]
+ [0] {m_player=0x014add00 player_id=0 tracker_player_id=47732 ...} net_player
+ [1] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [2] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [3] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [4] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [5] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [6] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [7] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [8] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [9] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [10] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ [11] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
- Net_players[idx] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player
+ m_player 0x00000000 {callsign=0x00000000 <Bad Ptr> short_callsign=0x0000001d <Bad Ptr> short_callsign_width=??? ...} player *
        player_id 0 short
        tracker_player_id 0 int
        flags 0 int
        state 0 int
        reliable_socket 4294967295 unsigned int
        client_cinfo_seq 0 unsigned short
        client_server_seq 0 unsigned short
        last_heard_time 0 long
+ s_info {ping={...} wing_index_backup=0 wing_index=0 ...} net_player_server_info
+ p_info {p_objp=0x00000000 team=0 ship_index=0 ...} net_player_info
        sv_bytes_sent 0 int
        sv_last_pl 0 int
        cl_bytes_recvd 0 int
        cl_last_pl 0 int
- Net_players[idx].m_player 0x00000000 {callsign=0x00000000 <Bad Ptr> short_callsign=0x0000001d <Bad Ptr> short_callsign_width=??? ...} player *
+ callsign 0x00000000 <Bad Ptr> char [29]
+ short_callsign 0x0000001d <Bad Ptr> char [29]
        short_callsign_width CXX0030: Error: expression cannot be evaluated
+ image_filename 0x00000040 <Bad Ptr> char [32]
+ squad_filename 0x00000060 <Bad Ptr> char [32]
+ squad_name 0x00000080 <Bad Ptr> char [33]
        num_campaigns CXX0030: Error: expression cannot be evaluated
+ current_campaign 0x000000a8 <Bad Ptr> char [32]
        campaigns CXX0017: Error: symbol "" not found
        readyroom_listing_mode CXX0030: Error: expression cannot be evaluated
        main_hall CXX0030: Error: expression cannot be evaluated
        flags CXX0030: Error: expression cannot be evaluated
        save_flags CXX0030: Error: expression cannot be evaluated
+ keyed_targets 0x000000dc {next=??? prev=??? how_added=??? ...} htarget_list [8]
        current_hotkey_set CXX0030: Error: expression cannot be evaluated
+ lead_target_pos {xyz={...} a1d=0x00000160 } vec3d
        lead_target_cheat CXX0030: Error: expression cannot be evaluated
        lead_indicator_active CXX0030: Error: expression cannot be evaluated
        lock_indicator_x CXX0030: Error: expression cannot be evaluated
        lock_indicator_y CXX0030: Error: expression cannot be evaluated
        lock_indicator_start_x CXX0030: Error: expression cannot be evaluated
        lock_indicator_start_y CXX0030: Error: expression cannot be evaluated
        lock_indicator_visible CXX0030: Error: expression cannot be evaluated
        lock_time_to_target CXX0030: Error: expression cannot be evaluated
        lock_dist_to_target CXX0030: Error: expression cannot be evaluated
        last_ship_flown_si_index CXX0030: Error: expression cannot be evaluated
        objnum CXX0030: Error: expression cannot be evaluated
+ bi {status=0x00000198 } button_info
+ ci {pitch=??? vertical=??? heading=??? ...} control_info
+ stats {flags=??? score=??? rank=??? ...} scoring_struct
        friendly_hits CXX0030: Error: expression cannot be evaluated
        friendly_damage CXX0030: Error: expression cannot be evaluated
        friendly_last_hit_time CXX0030: Error: expression cannot be evaluated
        last_warning_message_time CXX0030: Error: expression cannot be evaluated
        control_mode CXX0030: Error: expression cannot be evaluated
        saved_viewer_mode CXX0030: Error: expression cannot be evaluated
        check_warn_timestamp CXX0030: Error: expression cannot be evaluated
        distance_warning_count CXX0030: Error: expression cannot be evaluated
        distance_warning_time CXX0030: Error: expression cannot be evaluated
        allow_warn_timestamp CXX0030: Error: expression cannot be evaluated
        warn_count CXX0030: Error: expression cannot be evaluated
        damage_this_burst CXX0030: Error: expression cannot be evaluated
        repair_sound_loop CXX0030: Error: expression cannot be evaluated
        cargo_scan_loop CXX0030: Error: expression cannot be evaluated
        praise_count CXX0030: Error: expression cannot be evaluated
        allow_praise_timestamp CXX0030: Error: expression cannot be evaluated
        praise_delay_timestamp CXX0030: Error: expression cannot be evaluated
        ask_help_count CXX0030: Error: expression cannot be evaluated
        allow_ask_help_timestamp CXX0030: Error: expression cannot be evaluated
        scream_count CXX0030: Error: expression cannot be evaluated
        allow_scream_timestamp CXX0030: Error: expression cannot be evaluated
        low_ammo_complaint_count CXX0030: Error: expression cannot be evaluated
        allow_ammo_timestamp CXX0030: Error: expression cannot be evaluated
        subsys_in_view CXX0030: Error: expression cannot be evaluated
        request_repair_timestamp CXX0030: Error: expression cannot be evaluated
        cargo_inspect_time CXX0030: Error: expression cannot be evaluated
        target_is_dying CXX0030: Error: expression cannot be evaluated
        current_target_sx CXX0030: Error: expression cannot be evaluated
        current_target_sy CXX0030: Error: expression cannot be evaluated
        target_in_lock_cone CXX0030: Error: expression cannot be evaluated
        locking_subsys CXX0017: Error: symbol "" not found
        locking_subsys_parent CXX0030: Error: expression cannot be evaluated
        locking_on_center CXX0030: Error: expression cannot be evaluated
        killer_objtype CXX0030: Error: expression cannot be evaluated
        killer_species CXX0030: Error: expression cannot be evaluated
        killer_weapon_index CXX0030: Error: expression cannot be evaluated
+ killer_parent_name 0x00000f1c <Bad Ptr> char [32]
        check_for_all_alone_msg CXX0030: Error: expression cannot be evaluated
        update_dumbfire_time CXX0030: Error: expression cannot be evaluated
        update_lock_time CXX0030: Error: expression cannot be evaluated
        threat_flags CXX0030: Error: expression cannot be evaluated
        auto_advance CXX0030: Error: expression cannot be evaluated
+ m_local_options {flags=??? obj_update_level=??? } multi_local_options
+ m_server_options {squad_set=??? endgame_set=??? flags=??? ...} multi_server_options
        insignia_texture CXX0030: Error: expression cannot be evaluated
        tips CXX0030: Error: expression cannot be evaluated
        shield_penalty_stamp CXX0030: Error: expression cannot be evaluated
        failures_this_session CXX0030: Error: expression cannot be evaluated
        show_skip_popup CXX0030: Error: expression cannot be evaluated
        num_variables CXX0030: Error: expression cannot be evaluated
+ player_variables 0x00000f90 {type=??? text=0x00000f94 <Bad Ptr> variable_name=0x00000fb4 <Bad Ptr> } sexp_variable [100]
+ death_message 0x00002a20 <Bad Ptr> char [256]
+ lua_ci {pitch=??? vertical=??? heading=??? ...} control_info
+ lua_bi {status=0x00002b54 } button_info
+ lua_bi_full {status=0x00002b64 } button_info
        Objects 0x010066b8 struct object * Objects {next=0x010068ec prev=0x00ffc2d0 signature=1 ...} object [0]
- changedobj 0x010066b8 struct object * Objects {next=0x010068ec prev=0x00ffc2d0 signature=1 ...} object *
+ next 0x010068ec {next=0x01007ef4 prev=0x010066b8 signature=2 ...} object *
+ prev 0x00ffc2d0 struct object obj_used_list {next=0x010066b8 prev=0x0100c10c signature=0 ...} object *
        signature 1 int
        type 1 '' char
        parent -1 int
        parent_sig 1 int
        parent_type 1 '' char
        instance 0 int
        flags 1031 unsigned int
+ pos {xyz={...} a1d=0x010066dc } vec3d
+ orient {vec={...} a2d=0x010066e8 a1d=0x010066e8 } matrix
        radius 14.109023 float
+ last_pos {xyz={...} a1d=0x01006710 } vec3d
+ last_orient {vec={...} a2d=0x0100671c a1d=0x0100671c } matrix
+ phys_info {flags=2 mass=302.46011 center_of_mass={...} ...} physics_info
+ shield_quadrant 0x0100687c float [4]
        hull_strength 250.00000 float
        sim_hull_strength 0.00000000 float
+ objsnd_num 0x01006894 short [32]
        net_signature 2 unsigned short
        num_pairs 3 int
+ jnp 0x00000000 {m_name=0x0000000c <Bad Ptr> m_modelnum=??? m_objnum=??? ...} jump_node *
+ dock_list 0x00000000 {next=??? dockpoint_used=??? docked_objp=??? } dock_instance *
+ dead_dock_list 0x00000000 {next=??? dockpoint_used=??? docked_objp=??? } dock_instance *
        collision_group_id 0 int
        idx 1 int

2010-01-28 23:52

 

testteleport2.fs2 (4,768 bytes)

FUBAR-BDHR

2010-01-29 00:06

developer   ~0011599

OK I misread that it's just sending the packet to 12 ships. Bad piece of code there as it should be using the global variable instead of a hard coded 12.

Anyway it assumes any ship or waypoint is a player object and tries to move it. Looking at that code it seems quite a few things could go wrong. For instance I don't see any updates for moving a team or wing if the player is part of it. This is all in sexp.cpp function sexp_set_object_position()

karajorma

2010-02-12 06:44

administrator   ~0011652

That should fix it.

It will also stop the server sending itself a packet to tell itself to update the ship position to the position it's already at. :p

Issue History

Date Modified Username Field Change
2010-01-28 22:42 sausage New Issue
2010-01-28 22:42 sausage File Added: testteleport.fs2
2010-01-28 23:50 FUBAR-BDHR Note Added: 0011598
2010-01-28 23:52 FUBAR-BDHR File Added: testteleport2.fs2
2010-01-29 00:06 FUBAR-BDHR Note Added: 0011599
2010-02-06 11:06 karajorma Status new => assigned
2010-02-06 11:06 karajorma Assigned To => karajorma
2010-02-12 06:44 karajorma Note Added: 0011652
2010-02-12 06:44 karajorma Status assigned => resolved
2010-02-12 06:44 karajorma Fixed in Version => 3.6.11
2010-02-12 06:44 karajorma Resolution open => fixed