From fcaef648ec2f8972e7ff0916619ade9db47ebf37 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 7 Sep 2020 07:23:13 -0700 Subject: [PATCH] Net: Fix memory corruption on save old state. Can't restore these if they're not inited either. --- Core/HLE/sceKernelThread.cpp | 1 + Core/HLE/sceNet.cpp | 4 +++- Core/HLE/sceNetAdhoc.cpp | 8 ++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index 0e096111c0..cade794e08 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -683,6 +683,7 @@ int __KernelRegisterActionType(ActionCreator creator) void __KernelRestoreActionType(int actionType, ActionCreator creator) { + _assert_(actionType >= 0); mipsCalls.restoreActionType(actionType, creator); } diff --git a/Core/HLE/sceNet.cpp b/Core/HLE/sceNet.cpp index d1ad7e15e5..7ea5500995 100644 --- a/Core/HLE/sceNet.cpp +++ b/Core/HLE/sceNet.cpp @@ -244,7 +244,9 @@ void __NetDoState(PointerWrap &p) { Do(p, netApctlState); Do(p, netApctlInfo); Do(p, actionAfterApctlMipsCall); - __KernelRestoreActionType(actionAfterApctlMipsCall, AfterApctlMipsCall::Create); + if (actionAfterApctlMipsCall != -1) { + __KernelRestoreActionType(actionAfterApctlMipsCall, AfterApctlMipsCall::Create); + } Do(p, apctlThreadHackAddr); Do(p, apctlThreadID); } diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 496a3a892b..683f0878ef 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -650,7 +650,9 @@ void __NetAdhocDoState(PointerWrap &p) { if (s >= 2) { Do(p, actionAfterMatchingMipsCall); - __KernelRestoreActionType(actionAfterMatchingMipsCall, AfterMatchingMipsCall::Create); + if (actionAfterMatchingMipsCall != -1) { + __KernelRestoreActionType(actionAfterMatchingMipsCall, AfterMatchingMipsCall::Create); + } Do(p, dummyThreadHackAddr); } @@ -660,7 +662,9 @@ void __NetAdhocDoState(PointerWrap &p) { } if (s >= 3) { Do(p, actionAfterAdhocMipsCall); - __KernelRestoreActionType(actionAfterAdhocMipsCall, AfterAdhocMipsCall::Create); + if (actionAfterAdhocMipsCall != -1) { + __KernelRestoreActionType(actionAfterAdhocMipsCall, AfterAdhocMipsCall::Create); + } Do(p, matchingThreadHackAddr); }