diff --git a/src/Icons/Models/IconResult.cs b/src/Icons/Models/IconResult.cs index d8a2c723e4..c046efbf19 100644 --- a/src/Icons/Models/IconResult.cs +++ b/src/Icons/Models/IconResult.cs @@ -5,13 +5,12 @@ namespace Bit.Icons.Models { public class IconResult { - public IconResult(string href, HtmlNode node) + public IconResult(string href, string sizes) { Path = href; - var sizesAttr = node.Attributes["sizes"]; - if(!string.IsNullOrWhiteSpace(sizesAttr?.Value)) + if(!string.IsNullOrWhiteSpace(sizes)) { - var sizeParts = sizesAttr.Value.Split('x'); + var sizeParts = sizes.Split('x'); if(sizeParts.Length == 2 && int.TryParse(sizeParts[0].Trim(), out var width) && int.TryParse(sizeParts[1].Trim(), out var height)) { diff --git a/src/Icons/Services/IconFetchingService.cs b/src/Icons/Services/IconFetchingService.cs index 716b82b1fa..a8bfbf1b8a 100644 --- a/src/Icons/Services/IconFetchingService.cs +++ b/src/Icons/Services/IconFetchingService.cs @@ -61,23 +61,29 @@ namespace Bit.Icons.Services uri = response.RequestMessage.RequestUri; var doc = new HtmlDocument(); - try + using(var htmlStream = await response.Content.ReadAsStreamAsync()) { - var html = await response.Content.ReadAsStringAsync(); - if(html == null) + if(htmlStream == null) { + doc = null; return null; } - doc.LoadHtml(html); - if(doc.DocumentNode == null) + + try { + doc.Load(htmlStream); + if(doc.DocumentNode == null) + { + doc = null; + return null; + } + } + catch + { + doc = null; return null; } } - catch - { - return null; - } var baseUrl = "/"; var baseUrlNode = doc.DocumentNode.SelectSingleNode(@"//head/base[@href]"); @@ -88,10 +94,14 @@ namespace Bit.Icons.Services { baseUrl = hrefAttr.Value; } + + baseUrlNode = null; + hrefAttr = null; } var icons = new List(); var links = doc.DocumentNode.SelectNodes(@"//head/link[@href]"); + doc = null; if(links != null) { foreach(var link in links.Take(40)) @@ -103,9 +113,10 @@ namespace Bit.Icons.Services } var relAttr = link.Attributes["rel"]; + var sizesAttr = link.Attributes["sizes"]; if(relAttr != null && _iconRels.Contains(relAttr.Value.ToLower())) { - icons.Add(new IconResult(hrefAttr.Value, link)); + icons.Add(new IconResult(hrefAttr.Value, sizesAttr?.Value)); } else { @@ -114,12 +125,18 @@ namespace Bit.Icons.Services var extension = Path.GetExtension(hrefAttr.Value); if(_iconExtensions.Contains(extension.ToLower())) { - icons.Add(new IconResult(hrefAttr.Value, link)); + icons.Add(new IconResult(hrefAttr.Value, sizesAttr?.Value)); } } catch(ArgumentException) { } } + + sizesAttr = null; + relAttr = null; + hrefAttr = null; } + + links = null; } var iconResultTasks = new List();