MirrorNetworking / Mirror

#1 Open Source Unity Networking Library
https://mirror-networking.com
MIT License
5.26k stars 777 forks source link

fix: NetworkIdentity component bitmask shifting overflows #3941

Closed imerr closed 2 weeks ago

imerr commented 3 weeks ago

Thanks to EnragedOxygen on Discord for tracking this one down!

Turns out you need to be very explicit with typing otherwise c# will default to int. This will cause the component dirty mask to overflow for any components > 32, which causes weird issues since it will cancel each other out (both the bitmask creation and the following IsDirty(componentIndex) overflow) This will lead to serialization on the component index < 32 and > 32 (so index 33 would deserialize for both 1 and 33), but only sometimes Generally in real games this would show up as a size mismatch which is how EnragedOxygen discovered it

I've done a quick project wide search for any other occurences, but it seems like everywhere else is typed correctly