Browse Source

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
Ac_K 5 năm trước cách đây
mục cha
commit
7c3b559830
1 tập tin đã thay đổi với 17 bổ sung9 xóa
  1. 17 9
      Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs

+ 17 - 9
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')}");
+            }
         }
     }
 }