Handle IO errors in LoadManifest

pull/5005/head
Bond_009 4 years ago
parent 1ea2b200c0
commit 1fdd2d6e05

@ -512,30 +512,36 @@ namespace Emby.Server.Implementations.Plugins
var metafile = Path.Combine(dir, "meta.json"); var metafile = Path.Combine(dir, "meta.json");
if (File.Exists(metafile)) if (File.Exists(metafile))
{ {
// Only path where this stays null is when File.ReadAllBytes throws an IOException
byte[] data = null!;
try try
{ {
var data = File.ReadAllBytes(metafile); data = File.ReadAllBytes(metafile);
manifest = JsonSerializer.Deserialize<PluginManifest>(data, _jsonOptions); 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);
} }
} catch (JsonException ex)
if (manifest != null)
{
if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
{ {
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. // No metafile, so lets see if the folder is versioned.

Loading…
Cancel
Save