fix: catch more exceptions in hooks

This commit is contained in:
Anna 2021-04-18 12:32:55 -04:00
parent 4f7d0930f2
commit 63f75a65ad
Signed by: anna
GPG Key ID: 0B391D8F06FCD9E0
2 changed files with 27 additions and 8 deletions

View File

@ -55,11 +55,22 @@ namespace XivCommon.Functions {
this.AddBattleTalkHook?.Dispose();
}
private unsafe byte AddBattleTalkDetour(IntPtr uiModule, IntPtr senderPtr, IntPtr messagePtr, float duration, byte style) {
private byte AddBattleTalkDetour(IntPtr uiModule, IntPtr senderPtr, IntPtr messagePtr, float duration, byte style) {
if (this.OnBattleTalk == null) {
return this.AddBattleTalkHook!.Original(uiModule, senderPtr, messagePtr, duration, style);
goto Return;
}
try {
return this.AddBattleTalkDetourInner(uiModule, senderPtr, messagePtr, duration, style);
} catch (Exception ex) {
PluginLog.LogError(ex, "Exception in BattleTalk detour");
}
Return:
return this.AddBattleTalkHook!.Original(uiModule, senderPtr, messagePtr, duration, style);
}
private unsafe byte AddBattleTalkDetourInner(IntPtr uiModule, IntPtr senderPtr, IntPtr messagePtr, float duration, byte style) {
var rawSender = Util.ReadTerminated(senderPtr);
var rawMessage = Util.ReadTerminated(messagePtr);
@ -75,7 +86,7 @@ namespace XivCommon.Functions {
try {
this.OnBattleTalk?.Invoke(ref sender, ref message, ref options, ref handled);
} catch (Exception ex) {
PluginLog.Log(ex, "Exception in BattleTalk detour");
PluginLog.Log(ex, "Exception in BattleTalk event");
}
if (handled) {

View File

@ -62,10 +62,20 @@ namespace XivCommon.Functions {
private void AddonTalkV45Detour(IntPtr addon, IntPtr a2, IntPtr data) {
if (this.OnTalk == null) {
this.AddonTalkV45Hook!.Original(addon, a2, data);
return;
goto Return;
}
try {
this.AddonTalkV45DetourInner(data);
} catch (Exception ex) {
PluginLog.LogError(ex, "Exception in Talk detour");
}
Return:
this.AddonTalkV45Hook!.Original(addon, a2, data);
}
private void AddonTalkV45DetourInner(IntPtr data) {
var rawName = Util.ReadTerminated(Marshal.ReadIntPtr(data + NameOffset + 8));
var rawText = Util.ReadTerminated(Marshal.ReadIntPtr(data + TextOffset + 8));
var style = (TalkStyle) Marshal.ReadByte(data + StyleOffset);
@ -76,7 +86,7 @@ namespace XivCommon.Functions {
try {
this.OnTalk?.Invoke(ref name, ref text, ref style);
} catch (Exception ex) {
PluginLog.LogError(ex, "Exception in Talk detour");
PluginLog.LogError(ex, "Exception in Talk event");
}
var newName = name.Encode().Terminate();
@ -90,8 +100,6 @@ namespace XivCommon.Functions {
this.SetAtkValueString(data + TextOffset, (IntPtr) textPtr);
}
}
this.AddonTalkV45Hook!.Original(addon, a2, data);
}
}