浏览代码

Handle IO errors in LoadManifest

Bond_009 4 年之前
父节点
当前提交
1fdd2d6e05
共有 1 个文件被更改,包括 19 次插入13 次删除
  1. 19 13
      Emby.Server.Implementations/Plugins/PluginManager.cs

+ 19 - 13
Emby.Server.Implementations/Plugins/PluginManager.cs

@@ -512,30 +512,36 @@ namespace Emby.Server.Implementations.Plugins
             var metafile = Path.Combine(dir, "meta.json");
             if (File.Exists(metafile))
             {
+                // Only path where this stays null is when File.ReadAllBytes throws an IOException
+                byte[] data = null!;
                 try
                 {
-                    var data = File.ReadAllBytes(metafile);
+                    data = File.ReadAllBytes(metafile);
                     manifest = JsonSerializer.Deserialize<PluginManifest>(data, _jsonOptions);
                 }
-                catch (JsonException ex)
+                catch (IOException ex)
                 {
-                    _logger.LogError(ex, "Error deserializing {Path}.", dir);
+                    _logger.LogError(ex, "Error reading file {Path}.", dir);
                 }
-            }
-
-            if (manifest != null)
-            {
-                if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
+                catch (JsonException ex)
                 {
-                    targetAbi = _minimumVersion;
+                    _logger.LogError(ex, "Error deserializing {Json}.", Encoding.UTF8.GetString(data!));
                 }
 
-                if (!Version.TryParse(manifest.Version, out version))
+                if (manifest != null)
                 {
-                    manifest.Version = _minimumVersion.ToString();
-                }
+                    if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
+                    {
+                        targetAbi = _minimumVersion;
+                    }
+
+                    if (!Version.TryParse(manifest.Version, out version))
+                    {
+                        manifest.Version = _minimumVersion.ToString();
+                    }
 
-                return new LocalPlugin(dir, _appVersion >= targetAbi, manifest);
+                    return new LocalPlugin(dir, _appVersion >= targetAbi, manifest);
+                }
             }
 
             // No metafile, so lets see if the folder is versioned.