You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: NetworkBehaviour and NetworkVariableDelta length safety checks (#3405)
<!-- Replace this block with what this PR does and why. Describe what
you'd like reviewers to know, how you applied the engineering
principles, and any interesting tradeoffs made. Delete bullet points
below that don't apply, and update the changelog section as appropriate.
-->
<!-- Add short version of the JIRA ticket to the PR title (e.g. "feat:
new shiny feature [MTT-123]") -->
[MTTB-1080](https://jira.unity3d.com/browse/MTTB-1080)
fixes: #3335
## Changelog
- Fixed: NetworkBehaviour length safety checks use `int` instead of
`ushort`
- Fixed: NetworkVariable `EnsureNetworkVariableLengthSafety` checks use
`int` instead of `ushort`
- Fixed: NetworkVariableDeltas did not work with
`DistributedAuthorityMode` and `EnsureNetworkVariableLengthSafety`
## Testing and Documentation
- Includes unit tests.
- No documentation changes or additions were necessary.
<!-- Uncomment and mark items off with a * if this PR deprecates any
API:
### Deprecated API
- [ ] An `[Obsolete]` attribute was added along with a `(RemovedAfter
yyyy-mm-dd)` entry.
- [ ] An [api updater] was added.
- [ ] Deprecation of the API is explained in the CHANGELOG.
- [ ] The users can understand why this API was removed and what they
should use instead.
-->
## Backport
<!-- If this is a backport:
- Add the following to the PR title: "\[Backport\] ..." .
- Link to the original PR.
If this needs a backport - state this here
If a backport is not needed please provide the reason why.
If the "Backports" section is not present it will lead to a CI test
failure.
-->
Backported in #3415
---------
Co-authored-by: Noel Stephens <[email protected]>
// If skipping and length safety, then fill in a 0 size for this one spot
1331
1311
if(ensureLengthSafety)
1332
1312
{
1333
-
reader.ReadValueSafe(outushortsize);
1334
-
if(size!=0)
1313
+
reader.ReadValueSafe(outexpectedBytesToRead);
1314
+
if(expectedBytesToRead!=0)
1335
1315
{
1336
-
Debug.LogError($"[{name}][NetworkObjectId: {NetworkObjectId}][NetworkBehaviourId: {NetworkBehaviourId}][{NetworkVariableFields[j].Name}] Expected zero size for non-readable NetworkVariable when EnsureNetworkVariableLengthSafety is enabled! (Skipping)");
1316
+
Debug.LogError($"[{name}][NetworkObjectId: {NetworkObjectId}][NetworkBehaviourId: {NetworkBehaviourId}][{field.Name}] Expected zero size for non-readable NetworkVariable when EnsureNetworkVariableLengthSafety is enabled! (Skipping)");
1337
1317
}
1338
1318
}
1339
1319
continue;
1340
1320
}
1341
1321
1342
1322
// Read the NetworkVariable value
1343
-
NetworkVariableFields[j].ReadField(reader);
1323
+
field.ReadField(reader);
1344
1324
1345
1325
// When EnsureNetworkVariableLengthSafety always do a bounds check
1346
1326
if(ensureLengthSafety)
1347
1327
{
1348
-
if(reader.Position>(readStartPos+varSize))
1349
-
{
1350
-
if(NetworkLog.CurrentLogLevel<=LogLevel.Normal)
1351
-
{
1352
-
NetworkLog.LogWarning($"[{name}][NetworkObjectId: {NetworkObjectId}][NetworkBehaviourId: {NetworkBehaviourId}][{NetworkVariableFields[j].Name}] NetworkVariable data read too big. {reader.Position-(readStartPos+varSize)} bytes.");
1353
-
}
1354
-
1355
-
reader.Seek(readStartPos+varSize);
1356
-
}
1357
-
elseif(reader.Position<(readStartPos+varSize))
1328
+
vartotalBytesRead=reader.Position-readStartPos;
1329
+
if(totalBytesRead!=expectedBytesToRead)
1358
1330
{
1359
-
if(NetworkLog.CurrentLogLevel<=LogLevel.Normal)
1331
+
if(NetworkManager.LogLevel<=LogLevel.Normal)
1360
1332
{
1361
-
NetworkLog.LogWarning($"[{name}][NetworkObjectId: {NetworkObjectId}][NetworkBehaviourId: {NetworkBehaviourId}][{NetworkVariableFields[j].Name}] NetworkVariable data read too small. {(readStartPos+varSize)-reader.Position} bytes.");
1333
+
NetworkLog.LogWarning($"[{name}][NetworkObjectId: {NetworkObjectId}][NetworkBehaviourId: {NetworkBehaviourId}][{field.Name}] NetworkVariable read {totalBytesRead} bytes but was expected to read {expectedBytesToRead} bytes during synchronization deserialization!");
0 commit comments