@@ -375,7 +375,7 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
375375 {
376376 int currentPosition = ++ i ;
377377 UpdateField updateField ;
378- if ( mask [ currentPosition ] )
378+ if ( currentPosition < mask . Count && mask [ currentPosition ] )
379379 updateField = packet . ReadUpdateField ( ) ;
380380 else if ( oldValues == null || ! oldValues . TryGetValue ( currentPosition , out updateField ) )
381381 updateField = new UpdateField ( 0 ) ;
@@ -393,7 +393,7 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
393393 {
394394 bool hasGuidValue = false ;
395395 for ( var guidPart = 0 ; guidPart < guidSize ; ++ guidPart )
396- if ( mask [ start + guidI * guidSize + guidPart ] )
396+ if ( start + guidI * guidSize + guidPart < mask . Count && mask [ start + guidI * guidSize + guidPart ] )
397397 hasGuidValue = true ;
398398
399399 if ( ! hasGuidValue )
@@ -412,7 +412,7 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
412412 }
413413 else
414414 {
415- ulong low = ( fieldData [ guidI * guidSize + 1 ] . UInt32Value << 32 ) ;
415+ ulong low = fieldData [ guidI * guidSize + 1 ] . UInt32Value ;
416416 low <<= 32 ;
417417 low |= fieldData [ guidI * guidSize + 0 ] . UInt32Value ;
418418 ulong high = fieldData [ guidI * guidSize + 3 ] . UInt32Value ;
@@ -432,8 +432,8 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
432432 for ( var quatI = 0 ; quatI < quaternionCount ; ++ quatI )
433433 {
434434 bool hasQuatValue = false ;
435- for ( var guidPart = 0 ; guidPart < 4 ; ++ guidPart )
436- if ( mask [ start + quatI * 4 + guidPart ] )
435+ for ( var quatPart = 0 ; quatPart < 4 ; ++ quatPart )
436+ if ( start + start + quatI * 4 + quatPart < mask . Count && mask [ start + quatI * 4 + quatPart ] )
437437 hasQuatValue = true ;
438438
439439 if ( ! hasQuatValue )
@@ -451,8 +451,8 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
451451 for ( var quatI = 0 ; quatI < quaternionCount ; ++ quatI )
452452 {
453453 bool hasQuatValue = false ;
454- for ( var guidPart = 0 ; guidPart < 2 ; ++ guidPart )
455- if ( mask [ start + quatI * 2 + guidPart ] )
454+ for ( var quatPart = 0 ; quatPart < 2 ; ++ quatPart )
455+ if ( start + quatI * 2 + quatPart < mask . Count && mask [ start + quatI * 2 + quatPart ] )
456456 hasQuatValue = true ;
457457
458458 if ( ! hasQuatValue )
@@ -469,38 +469,44 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
469469 case UpdateFieldType . Uint :
470470 {
471471 for ( int k = 0 ; k < fieldData . Count ; ++ k )
472- if ( mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
472+ {
473+ if ( start + k < mask . Count && mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
473474 {
474475 var name = k > 0 ? key + " + " + k : key ;
475476 updateValues . Ints [ name ] = packet . AddValue ( name , fieldData [ k ] . UInt32Value , index ) ;
476477 }
478+ }
477479 break ;
478480 }
479481 case UpdateFieldType . Int :
480482 {
481483 for ( int k = 0 ; k < fieldData . Count ; ++ k )
482- if ( mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
484+ {
485+ if ( start + k < mask . Count && mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
483486 {
484487 var name = k > 0 ? key + " + " + k : key ;
485488 updateValues . Ints [ name ] = packet . AddValue ( name , fieldData [ k ] . Int32Value , index ) ;
486489 }
490+ }
487491 break ;
488492 }
489493 case UpdateFieldType . Float :
490494 {
491495 for ( int k = 0 ; k < fieldData . Count ; ++ k )
492- if ( mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
496+ {
497+ if ( start + k < mask . Count && mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
493498 {
494499 var name = k > 0 ? key + " + " + k : key ;
495500 updateValues . Floats [ name ] = packet . AddValue ( name , fieldData [ k ] . FloatValue , index ) ;
496501 }
502+ }
497503 break ;
498504 }
499505 case UpdateFieldType . Bytes :
500506 {
501507 for ( int k = 0 ; k < fieldData . Count ; ++ k )
502508 {
503- if ( mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
509+ if ( start + k < mask . Count && mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
504510 {
505511 byte [ ] intBytes = BitConverter . GetBytes ( fieldData [ k ] . UInt32Value ) ;
506512 var name = k > 0 ? key + " + " + k : key ;
@@ -514,7 +520,7 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
514520 {
515521 for ( int k = 0 ; k < fieldData . Count ; ++ k )
516522 {
517- if ( mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
523+ if ( start + k < mask . Count && mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
518524 {
519525 var name = k > 0 ? key + " + " + k : key ;
520526 updateValues . Ints [ name ] = fieldData [ k ] . UInt32Value ;
@@ -542,7 +548,7 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
542548 }
543549 default :
544550 for ( int k = 0 ; k < fieldData . Count ; ++ k )
545- if ( mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
551+ if ( start + k < mask . Count && mask [ start + k ] && ( ! isCreating || fieldData [ k ] . UInt32Value != 0 ) )
546552 packet . AddValue ( k > 0 ? key + " + " + k : key , fieldData [ k ] . UInt32Value + "/" + fieldData [ k ] . FloatValue , index ) ;
547553 break ;
548554 }
0 commit comments