mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-09 22:00:39 +01:00
fix crash assuming wrong stream version
This commit is contained in:
parent
713ce151e9
commit
7275569842
1 changed files with 12 additions and 10 deletions
|
@ -263,7 +263,8 @@ static XP_Bool handleIllegalWord( ServerCtxt* server, XWEnv xwe,
|
||||||
static void tellMoveWasLegal( ServerCtxt* server, XWEnv xwe );
|
static void tellMoveWasLegal( ServerCtxt* server, XWEnv xwe );
|
||||||
static void writeProto( const ServerCtxt* server, XWStreamCtxt* stream,
|
static void writeProto( const ServerCtxt* server, XWStreamCtxt* stream,
|
||||||
XW_Proto proto );
|
XW_Proto proto );
|
||||||
static void readGuestAddrs( ServerCtxt* server, XWStreamCtxt* stream );
|
static void readGuestAddrs( ServerCtxt* server, XWStreamCtxt* stream,
|
||||||
|
XP_U8 streamVersion );
|
||||||
|
|
||||||
static void ri_fromStream( RematchInfo* rip, XWStreamCtxt* stream,
|
static void ri_fromStream( RematchInfo* rip, XWStreamCtxt* stream,
|
||||||
const ServerCtxt* server );
|
const ServerCtxt* server );
|
||||||
|
@ -636,7 +637,7 @@ server_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* mode
|
||||||
|
|
||||||
if ( server->vol.gi->serverRole == SERVER_ISCLIENT
|
if ( server->vol.gi->serverRole == SERVER_ISCLIENT
|
||||||
&& 2 < nPlayers ) {
|
&& 2 < nPlayers ) {
|
||||||
readGuestAddrs( server, stream );
|
readGuestAddrs( server, stream, server->nv.streamVersion );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( 0 != (server->nv.flags & MASK_HAVE_RIP_INFO) ) {
|
if ( 0 != (server->nv.flags & MASK_HAVE_RIP_INFO) ) {
|
||||||
|
@ -916,6 +917,7 @@ addGuestAddrsIf( const ServerCtxt* server, XP_U16 sendee, XWStreamCtxt* stream )
|
||||||
XP_LOGFF("(sendee: %d)", sendee );
|
XP_LOGFF("(sendee: %d)", sendee );
|
||||||
XP_ASSERT( amHost( server ) );
|
XP_ASSERT( amHost( server ) );
|
||||||
XP_U16 version = stream_getVersion( stream );
|
XP_U16 version = stream_getVersion( stream );
|
||||||
|
XP_ASSERT( version == server->nv.streamVersion );
|
||||||
if ( STREAM_VERS_REMATCHADDRS <= version
|
if ( STREAM_VERS_REMATCHADDRS <= version
|
||||||
/* Not needed for two-device games */
|
/* Not needed for two-device games */
|
||||||
&& 2 < server->nv.nDevices ) {
|
&& 2 < server->nv.nDevices ) {
|
||||||
|
@ -953,11 +955,10 @@ addGuestAddrsIf( const ServerCtxt* server, XP_U16 sendee, XWStreamCtxt* stream )
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
readGuestAddrs( ServerCtxt* server, XWStreamCtxt* stream )
|
readGuestAddrs( ServerCtxt* server, XWStreamCtxt* stream, XP_U8 streamVersion )
|
||||||
{
|
{
|
||||||
XP_U16 version = stream_getVersion( stream );
|
XP_LOGFF( "version: 0x%X", streamVersion );
|
||||||
XP_LOGFF( "version: %X", version );
|
if ( STREAM_VERS_REMATCHADDRS <= streamVersion && 0 < stream_getSize(stream) ) {
|
||||||
if ( STREAM_VERS_REMATCHADDRS <= version && 0 < stream_getSize(stream) ) {
|
|
||||||
XP_U16 len = server->nv.rematch.addrsLen = stream_getU32VL( stream );
|
XP_U16 len = server->nv.rematch.addrsLen = stream_getU32VL( stream );
|
||||||
XP_LOGFF( "rematch.addrsLen: %d", server->nv.rematch.addrsLen );
|
XP_LOGFF( "rematch.addrsLen: %d", server->nv.rematch.addrsLen );
|
||||||
if ( 0 < len ) {
|
if ( 0 < len ) {
|
||||||
|
@ -967,11 +968,11 @@ readGuestAddrs( ServerCtxt* server, XWStreamCtxt* stream )
|
||||||
XP_LOGFF( "loaded %d bytes of rematch.addrs", len );
|
XP_LOGFF( "loaded %d bytes of rematch.addrs", len );
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
XWStreamCtxt* tmpStream = mkServerStream( server );
|
XWStreamCtxt* tmpStream = mkServerStream( server );
|
||||||
stream_setVersion( tmpStream, version );
|
stream_setVersion( tmpStream, streamVersion );
|
||||||
stream_putBytes( tmpStream, server->nv.rematch.addrs,
|
stream_putBytes( tmpStream, server->nv.rematch.addrs,
|
||||||
server->nv.rematch.addrsLen );
|
server->nv.rematch.addrsLen );
|
||||||
|
|
||||||
if ( STREAM_VERS_REMATCHORDER <= version ) {
|
if ( STREAM_VERS_REMATCHORDER <= streamVersion ) {
|
||||||
RematchInfo ri;
|
RematchInfo ri;
|
||||||
ri_fromStream( &ri, tmpStream, server );
|
ri_fromStream( &ri, tmpStream, server );
|
||||||
for ( int ii = 0; ii < ri.nAddrs; ++ii ) {
|
for ( int ii = 0; ii < ri.nAddrs; ++ii ) {
|
||||||
|
@ -2197,7 +2198,7 @@ client_readInitialMessage( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
||||||
|
|
||||||
/* version; any dependencies here? */
|
/* version; any dependencies here? */
|
||||||
XP_U8 streamVersion = stream_getU8( stream );
|
XP_U8 streamVersion = stream_getU8( stream );
|
||||||
XP_LOGFF( "set streamVersion to %d", streamVersion );
|
XP_LOGFF( "set streamVersion to 0x%X", streamVersion );
|
||||||
stream_setVersion( stream, streamVersion );
|
stream_setVersion( stream, streamVersion );
|
||||||
if ( STREAM_VERS_NINETILES > streamVersion ) {
|
if ( STREAM_VERS_NINETILES > streamVersion ) {
|
||||||
model_forceStack7Tiles( server->vol.model );
|
model_forceStack7Tiles( server->vol.model );
|
||||||
|
@ -2303,7 +2304,7 @@ client_readInitialMessage( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* stream )
|
||||||
}
|
}
|
||||||
|
|
||||||
readMQTTDevID( server, stream );
|
readMQTTDevID( server, stream );
|
||||||
readGuestAddrs( server, stream );
|
readGuestAddrs( server, stream, stream_getVersion( stream ) );
|
||||||
|
|
||||||
syncPlayers( server );
|
syncPlayers( server );
|
||||||
|
|
||||||
|
@ -2354,6 +2355,7 @@ sendInitialMessage( ServerCtxt* server, XWEnv xwe )
|
||||||
XP_U32 gameID = server->vol.gi->gameID;
|
XP_U32 gameID = server->vol.gi->gameID;
|
||||||
#ifdef STREAM_VERS_BIGBOARD
|
#ifdef STREAM_VERS_BIGBOARD
|
||||||
XP_U8 streamVersion = server->nv.streamVersion;
|
XP_U8 streamVersion = server->nv.streamVersion;
|
||||||
|
XP_LOGFF( "streamVersion: 0x%X", streamVersion );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
XP_ASSERT( server->nv.nDevices > 1 );
|
XP_ASSERT( server->nv.nDevices > 1 );
|
||||||
|
|
Loading…
Add table
Reference in a new issue