diff options
author | Ac_K <Acoustik666@gmail.com> | 2020-11-18 19:04:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-18 19:04:42 +0100 |
commit | 7c3b559830f0cd466ea7bc01743cca26ae48989a (patch) | |
tree | 299b24dc5b73f1f20e97d3cafbb6cb2ab1cfc7e0 | |
parent | 9435d62206423c1a5056af557135310fc068f84b (diff) |
loaders: Fix possible parsing errors of informations on some NSO (#1724)
This fix possible parsing errors of informations on some NSO where the "zero" field don't exist introduced by #1661 leading to crashes at start.
References:
https://github.com/Atmosphere-NX/Atmosphere/blob/master/stratosphere/creport/source/creport_modules.cpp#L202
https://github.com/Thog/oss-rtld/blob/master/source/main.cpp#L14
-rw-r--r-- | Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs b/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs index 99f49293..c9741417 100644 --- a/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs +++ b/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs @@ -72,16 +72,21 @@ namespace Ryujinx.HLE.Loaders.Executables string rawTextBuffer = Encoding.ASCII.GetString(roBuffer, 0, RoSize); StringBuilder stringBuilder = new StringBuilder(); - int length = BitConverter.ToInt32(roBuffer, 4); - string moduleName = Encoding.UTF8.GetString(roBuffer, 8, length); - - MatchCollection moduleMatches = Regex.Matches(rawTextBuffer, @"[a-z]:[\\/][ -~]{5,}\.nss", RegexOptions.IgnoreCase); - if (moduleMatches.Count > 0) + int zero = BitConverter.ToInt32(roBuffer, 0); + + if (zero == 0) { - moduleName = moduleMatches.First().Value; - } + int length = BitConverter.ToInt32(roBuffer, 4); + string modulePath = Encoding.UTF8.GetString(roBuffer, 8, length); + + MatchCollection moduleMatches = Regex.Matches(rawTextBuffer, @"[a-z]:[\\/][ -~]{5,}\.nss", RegexOptions.IgnoreCase); + if (moduleMatches.Count > 0) + { + modulePath = moduleMatches.First().Value; + } - stringBuilder.AppendLine($" Module: {moduleName}"); + stringBuilder.AppendLine($" Module: {modulePath}"); + } MatchCollection fsSdkMatches = Regex.Matches(rawTextBuffer, @"sdk_version: ([0-9.]*)"); if (fsSdkMatches.Count != 0) @@ -98,7 +103,10 @@ namespace Ryujinx.HLE.Loaders.Executables stringBuilder.AppendLine($"{libHeader}{libContent}"); } - Logger.Info?.Print(LogClass.Loader, $"{Name}:\n{stringBuilder.ToString().TrimEnd('\r', '\n')}"); + if (stringBuilder.Length > 0) + { + Logger.Info?.Print(LogClass.Loader, $"{Name}:\n{stringBuilder.ToString().TrimEnd('\r', '\n')}"); + } } } }
\ No newline at end of file |