aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2020-11-18 19:04:42 +0100
committerGitHub <noreply@github.com>2020-11-18 19:04:42 +0100
commit7c3b559830f0cd466ea7bc01743cca26ae48989a (patch)
tree299b24dc5b73f1f20e97d3cafbb6cb2ab1cfc7e0
parent9435d62206423c1a5056af557135310fc068f84b (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.cs26
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