{"id":297180,"date":"2020-01-15T15:00:30","date_gmt":"2020-01-15T15:00:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=297180"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=297180","title":{"rendered":"\u0410\u043d\u0430\u043b\u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 Emby \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio"},"content":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/484050\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rr\/ar\/h3\/rrarh3smm2vkgpopwdn2fgqan0s.png\" alt=\"Picture 3\"><\/div>\n<p>  Emby \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u0434\u0438\u0430\u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 Plex \u0438 Kodi. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio. \u041d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 Emby \u0435\u0441\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u043e\u043c\u0435\u0442\u043e\u0447\u043a\u0430 \u00abBuilt with ReSharper\u00bb. \u0427\u0442\u043e \u0436\u0435, \u0442\u0430\u043a \u0434\u0430\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 PVS-Studio<\/h2>\n<p>  PVS-Studio \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 Windows, Linux \u0438 macOS. \u041e\u043d \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 \u0421, C++, C# \u0438 Java.<\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/h2>\n<p>  Emby \u2014 \u043c\u0435\u0434\u0438\u0430\u0441\u0435\u0440\u0432\u0435\u0440, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/MediaBrowser\/Emby\">GitHub<\/a>. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0438 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043c\u0435\u0434\u0438\u0430\u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443 (\u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e, \u0444\u043e\u0442\u043e) \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0412\u044b\u0436\u0438\u043c\u043a\u0430 \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/emby.media\/\">Emby<\/a>: <\/p>\n<ul>\n<li>Emby \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0430\u0448\u0438 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u043b\u0435\u0442\u0443 \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435;<\/li>\n<li>\u041e\u0431\u0448\u0438\u0440\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043b\u0435\u0433\u043a\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u0434\u0435\u0442\u044c\u043c\u0438;<\/li>\n<li>Emby \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442 \u0432\u0430\u0448\u0438 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041e\u043d\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e;<\/li>\n<li>\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435;<\/li>\n<li>\u041b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441 \u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438 \u0438 \u0441\u0435\u043c\u044c\u0435\u0439;<\/li>\n<li>\u0418 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0423\u0447\u0430\u0441\u0442\u043a\u0438 \u043a\u043e\u0434\u0430, \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0448\u0438\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430<\/h2>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3001\/\">V3001<\/a> There are identical sub-expressions &#8216;c != &#8216;&lt;&#187; to the left and to the right of the &#8216;&amp;&amp;&#8217; operator. HttpListenerRequest.Managed.cs 49<\/p>\n<pre><code class=\"cs\">internal void SetRequestLine(string req) {   ....   if ((ic &gt;= 'A' &amp;&amp; ic &lt;= 'Z') ||   (ic &gt; 32 &amp;&amp; c &lt; 127 &amp;&amp; c != '(' &amp;&amp; c != ')' &amp;&amp; c != '&lt;' &amp;&amp;   \/\/ &lt;=   c != '&lt;' &amp;&amp; c != '&gt;' &amp;&amp; c != '@' &amp;&amp; c != ',' &amp;&amp; c != ';' &amp;&amp;  \/\/ &lt;=   c != ':' &amp;&amp; c != '\\\\' &amp;&amp; c != '\"' &amp;&amp; c != '\/' &amp;&amp; c != '[' &amp;&amp;   c != ']' &amp;&amp; c != '?' &amp;&amp; c != '=' &amp;&amp; c != '{' &amp;&amp; c != '}'))     continue;   .... }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>c != &#8216;&lt;&#8216;<\/i>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0437\u0430\u043a\u0440\u0430\u043b\u0430\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430, \u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 <i>&#8216;&lt;&#8216; <\/i>\u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u0438\u043d\u043e\u0435. \u0418\u043b\u0438, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043b\u0438\u0448\u043d\u0435\u0435 \u0438 \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3001\/\">V3001<\/a> There are identical sub-expressions &#8216;SmbConstants.AttrHidden&#8217; to the left and to the right of the &#8216;|&#8217; operator. SmbComDelete.cs 29<\/p>\n<pre><code class=\"cs\">internal SmbComDelete(string fileName) {   Path = fileName;   Command = SmbComDelete;   _searchAttributes = SmbConstants.AttrHidden |                       SmbConstants.AttrHidden |                       SmbConstants.AttrSystem; }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u043f\u044f\u0442\u044c \u043d\u0430\u0448\u0435\u043b \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0443\u043f\u0440\u0435\u043a\u0430\u044e \u0432 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 Emby, \u0432\u0441\u0435 \u043c\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (<a href=\"https:\/\/www.viva64.com\/ru\/examples\/v501\/\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/a>, <a href=\"https:\/\/www.viva64.com\/ru\/examples\/v3001\/\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/a>, <a href=\"https:\/\/www.viva64.com\/ru\/examples\/v6001\/\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/a>), \u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3004\/\">V3004<\/a> The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. SqliteItemRepository.cs 5648<\/p>\n<pre><code class=\"cs\">private QueryResult&lt;Tuple&lt;BaseItem, ItemCounts&gt;&gt; GetItemValues(....) {   ....   if (typesToCount.Length == 0)   {     whereText += \" And CleanName In (Select CleanValue                                     from ItemValues where \"     + typeClause + \" AND ItemId in (select guid from TypedBaseItems\"     + innerWhereText + \"))\";   }   else   {     \/\/whereText += \" And itemTypes not null\";     whereText += \" And CleanName In (Select CleanValue                                     from ItemValues where \"     + typeClause + \" AND ItemId in (select guid from TypedBaseItems\"     + innerWhereText + \"))\";   }   .... }<\/code><\/pre>\n<p>  \u0410 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u0438\u0437-\u0437\u0430 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b, \u0442.\u043a. \u0442\u0435\u043b\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 <i>if <\/i> \u0438 <i>else <\/i>\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b. \u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <i>typesToCount,<\/i> \u0435\u0441\u043b\u0438 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0451\u043c, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 -\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c. <\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3005\/\">V3005<\/a> The &#8216;_validProviderIds&#8217; variable is assigned to itself. BaseNfoParser.cs 77<\/p>\n<pre><code class=\"cs\">private Dictionary&lt;string, string&gt; _validProviderIds; .... public void Fetch(....) {   ....   _validProviderIds = _validProviderIds = new Dictionary&lt;....&gt;(....);   .... }<\/code><\/pre>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0432\u043b\u0435\u043a\u043b\u0430 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0431\u0435. \u0421\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3008\/\">V3008<\/a> The &#8216;Chapters&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 29, 28. Title.cs 29<\/p>\n<pre><code class=\"cs\">public Title(uint titleNum) {     ProgramChains = new List&lt;ProgramChain&gt;();     Chapters = new List&lt;Chapter&gt;();     Chapters = new List&lt;Chapter&gt;();     TitleNumber = titleNum; }<\/code><\/pre>\n<p>  \u041d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u043e\u043f\u044f\u0442\u044c\u2026 \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>Chapters<\/i> \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u043c \u043f\u043b\u043e\u0445\u0438\u043c \u044d\u0442\u043e\u0442 \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434 \u043d\u0435 \u0433\u0440\u043e\u0437\u0438\u0442, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435. \u0417\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0439\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3013\/\">V3013<\/a> It is odd that the body of &#8216;Read&#8217; function is fully equivalent to the body of &#8216;Write&#8217; function (407, line 415). BaseSqliteRepository.cs 407 <\/p>\n<pre><code class=\"cs\">public static IDisposable Read(this ReaderWriterLockSlim obj) {   return new WriteLockToken(obj); } public static IDisposable Write(this ReaderWriterLockSlim obj) {   return new WriteLockToken(obj); }  private sealed class WriteLockToken : IDisposable {   private ReaderWriterLockSlim _sync;   public WriteLockToken(ReaderWriterLockSlim sync)   {     _sync = sync;     sync.EnterWriteLock();   }   public void Dispose()   {     if (_sync != null)     {       _sync.ExitWriteLock();       _sync = null;     }   } }<\/code><\/pre>\n<p>  \u0422\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <i>Read <\/i> \u0438 <i>Write <\/i> \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443, \u043e \u0447\u0435\u043c \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u041c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.threading.readerwriterlockslim.enterwritelock?view=netframework-4.8\"><i>EnterWriteLock<\/i><\/a> \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u0414\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <i>EnterReadLock<\/i>, \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043a\u0443 \u043a\u043e\u0434\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0443\u0442 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0432 \u043a\u043e\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cs\">private sealed class ReadLockToken : IDisposable {   private ReaderWriterLockSlim _sync;   public ReadLockToken(ReaderWriterLockSlim sync)   {     _sync = sync;     sync.EnterReadLock();   }   public void Dispose()   {     if (_sync != null)     {        _sync.ExitReadLock();        _sync = null;     }   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3021\/\">V3021<\/a> There are two &#8216;if&#8217; statements with identical conditional expressions. The first &#8216;if&#8217; statement contains method return. This means that the second &#8216;if&#8217; statement is senseless SkiaEncoder.cs 537<\/p>\n<pre><code class=\"cs\">public string EncodeImage(string inputPath,                            DateTime dateModified,                            string outputPath,                            bool autoOrient,                            ImageOrientation? orientation,                            int quality,                            ImageProcessingOptions options,                            ImageFormat selectedOutputFormat) {   if (string.IsNullOrWhiteSpace(inputPath))   {       throw new ArgumentNullException(\"inputPath\");   }   if (string.IsNullOrWhiteSpace(inputPath))   {       throw new ArgumentNullException(\"outputPath\");   }   .... }<\/code><\/pre>\n<p>  \u0422\u0443\u0442, \u0432\u0438\u0434\u0438\u043c\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u043b \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u043e \u0437\u0430\u0431\u044b\u043b \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u0437 <i>inputPath <\/i> \u0432 <i>outputPath<\/i>. \u0414\u0430\u043b\u0435\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <i>outputPath<\/i> \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 <i>null<\/i>, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio:<\/b> <\/p>\n<ul>\n<li>V3022 Expression &#8216;processUnsupportedFrame(frame, CloseStatusCode.PolicyViolation, null)&#8217; is always false. WebSocket.cs 462<\/li>\n<li>V3022 Expression &#8216;processCloseFrame(frame)&#8217; is always false. WebSocket.cs 461<\/li>\n<li>V3022 Expression &#8216;frame.IsClose? processCloseFrame(frame): processUnsupportedFrame(frame, CloseStatusCode.PolicyViolation, null)&#8217; is always false. WebSocket.cs 460<\/li>\n<li>V3022 Expression &#8216;processPongFrame(frame)&#8217; is always true. WebSocket.cs 459<\/li>\n<li>V3022 Expression &#8216;processPingFrame(frame)&#8217; is always true. WebSocket.cs 457<\/li>\n<li>V3022 Expression &#8216;processDataFrame(frame)&#8217; is always true. WebSocket.cs 455<\/li>\n<li>V3022 Expression is always false. WebSocket.cs 448<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"cs\">private bool processWebSocketFrame(WebSocketFrame frame) {   return frame.IsCompressed &amp;&amp; _compression == CompressionMethod.None          ? processUnsupportedFrame(....)           : frame.IsFragmented            ? processFragmentedFrame(frame)            : frame.IsData              ? processDataFrame(frame)               : frame.IsPing                ? processPingFrame(frame)                 : frame.IsPong                  ? processPongFrame(frame)                   : frame.IsClose                               ? processCloseFrame(frame)                    : processUnsupportedFrame(....); } private bool processUnsupportedFrame(....) {   processException(....);   return false; } private bool processDataFrame(WebSocketFrame frame) {   ....   return true; } private bool processPingFrame(WebSocketFrame frame) {   var mask = Mask.Unmask;   return true; } private bool processPongFrame(WebSocketFrame frame) {   _receivePong.Set();   return true; } private bool processCloseFrame(WebSocketFrame frame) {   var payload = frame.PayloadData;   close(payload, !payload.ContainsReservedCloseStatusCode, false);   return false; }<\/code><\/pre>\n<p>  \u041d\u0430 \u043c\u043e\u0435\u043c \u0441\u0447\u0435\u0442\u0443 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043c\u043d\u043e\u0433\u043e, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 PVS-Studio, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u0438\u0436\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 13 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0430\u043d\u043e \u0430\u0436 7 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 (\u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e. \u0414\u0430\u043b\u0435\u0435 \u044f \u0440\u0430\u0441\u043f\u0438\u0448\u0443, \u043d\u0430 \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<ol>\n<li>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <i>frame.IsCompressed &amp;&amp; _compression == CompressionMethod.None<\/i> \u0438, \u0435\u0441\u043b\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u0438\u043d\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043c\u0435\u0442\u043e\u0434 <i>processUnsupportedFrame<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <i>false <\/i>(\u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430). \u0415\u0441\u043b\u0438 \u0436\u0435 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u043e\u0436\u043d\u043e, \u0442\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443.<\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>frame.IsFragmented<\/i>. \u0422\u0443\u0442 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/li>\n<li>\u0422\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>frame.IsData<\/i>. \u0415\u0441\u043b\u0438 \u0438\u0441\u0442\u0438\u043d\u043d\u043e, \u0442\u043e \u043c\u0435\u0442\u043e\u0434 <i>processDataFrame<\/i> \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442 <i>true<\/i>. \u041e\u0442\u0441\u044e\u0434\u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/li>\n<li>\u041f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c <i>frame.IsPing<\/i>. \u0418\u0441\u0442\u0438\u043d\u043d\u043e \u2013 <i>processPingFrame<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442 <i>true<\/i>. \u042d\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/li>\n<li>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <i>frame.IsPong<\/i>. \u0422\u0443\u0442 \u0432\u0441\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443.<\/li>\n<li>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435: <i>frame.IsClose<\/i>. <i>processCloseFrame <\/i> \u0438 <i>processUnsupportedFrame <\/i>\u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <i>false<\/i>.<\/li>\n<\/ol>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sq\/ut\/pe\/squtpenxx02rmgsg31uyqk7yt6q.png\" alt=\"Picture 1\"><\/div>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044f \u0432\u0430\u0441 \u043d\u0435 \u0443\u0442\u043e\u043c\u0438\u043b\u0430. \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3085\/\">V3085<\/a> The name of &#8216;RtpHeaderBytes&#8217; field in a nested type is ambiguous. The outer type contains static field with identical name. HdHomerunUdpStream.cs 200<\/p>\n<pre><code class=\"cs\">public class HdHomerunUdpStream : LiveStream, IDirectStreamProvider {   ....   private static int RtpHeaderBytes = 12;   public class UdpClientStream : Stream    {     private static int RtpHeaderBytes = 12;     private static int PacketSize = 1316;     private readonly MediaBrowser.Model.Net.ISocket _udpClient;     bool disposed;     ....   }   .... }<\/code><\/pre>\n<p>  \u0412\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <i>UdpClientStream <\/i>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <i>HdHomerunUdpStream<\/i>. \u042d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043d\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0432\u0441\u0435 \u043b\u0438 \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0435\u0433\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0438 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043d\u0430\u0440\u0435\u043a\u0430\u043d\u0438\u0439 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio:<\/b> <\/p>\n<ul>\n<li>V3090 Unsafe locking on a type. All instances of a type will have the same &#8216;Type&#8217; object. Lmhosts.cs 49<\/li>\n<li>V3090 Unsafe locking on a type. All instances of a type will have the same &#8216;Type&#8217; object. Lmhosts.cs 57<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"cs\">public class Lmhosts {   public static NbtAddress GetByName(string host)   {     lock (typeof(Lmhosts))     {       return GetByName(new Name(host, 0x20, null));     }   }    internal static NbtAddress GetByName(Name name)   {     lock (typeof(Lmhosts))     {       ....     }   } }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430. \u0422\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>lock<\/i> \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0431\u0435\u0437 \u0432\u0435\u0434\u043e\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437. \u0418\u0442\u043e\u0433\u043e\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u043d\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a: <\/p>\n<pre><code class=\"cs\">private Object locker = new Object();  public static NbtAddress GetByName(string host) {   lock (locker)   {     return GetByName(new Name(host, 0x20, null));   } }<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3142\/\">V3142<\/a> Unreacheble code detected. It is possible that an error is present. HdHomerunHost.cs 621<\/p>\n<pre><code class=\"cs\">protected override async Task&lt;ILiveStream&gt; GetChannelStream(....) {      ....     var enableHttpStream = true;     if (enableHttpStream)     {         mediaSource.Protocol = MediaProtocol.Http;          var httpUrl = channelInfo.Path;          \/\/ If raw was used, the tuner doesn't support params         if (!string.IsNullOrWhiteSpace(profile) &amp;&amp;             !string.Equals(profile, \"native\",                            StringComparison.OrdinalIgnoreCase))         {             httpUrl += \"?transcode=\" + profile;         }         mediaSource.Path = httpUrl;          return new SharedHttpStream(....);     }      return new HdHomerunUdpStream(....); }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u0418 \u0437\u0430\u0447\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 enableHttpStream \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 if?<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. <\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3083\/\">V3083<\/a> Unsafe invocation of event &#8216;RefreshStarted&#8217;, NullReferenceException is possible. Consider assigning event to a local variable before invoking it. ProviderManager.cs 943<\/p>\n<pre><code class=\"cs\">public void OnRefreshStart(BaseItem item) {   ....    if (RefreshStarted != null)   {     RefreshStarted(this, new GenericEventArgs&lt;BaseItem&gt;(item));   } } <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f <i>RefreshStarted<\/i>, \u043d\u0430 \u0447\u0442\u043e \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 <i>RefreshStarted<\/i> \u0432 \u043a\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 <i>null <\/i> \u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0442\u0435\u043b\u0435 <i>if<\/i> \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435. \u0418, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442, <i>RefreshStarted <\/i> \u043f\u0440\u0438\u043c\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>null<\/i>. \u041d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0433\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 <i>null<\/i> \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430:   <\/p>\n<pre><code class=\"cs\">RefreshStarted(this, new GenericEventArgs&lt;BaseItem&gt;(item));<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <i>NullReferenceException<\/i>.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3029\/\">V3029<\/a> The conditional expressions of the &#8216;if&#8217; statements situated alongside each other are identical. Check lines: 142, 152. LocalImageProvider.cs 142<\/p>\n<pre><code class=\"cs\">private void PopulateImages(....) {   ....   \/\/ Logo   if (!isEpisode &amp;&amp; !isSong &amp;&amp; !isPerson)   {     added = AddImage(....);     if (!added)     {       added = AddImage(....);     }   }   \/\/ Art   if (!isEpisode &amp;&amp; !isSong &amp;&amp; !isPerson)   {     AddImage(....);   }   .... }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u0440\u044f\u0434\u043e\u043c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if<\/i> \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0435\u043b\u0430 \u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <i>if <\/i> \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u0417\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u044e\u0441\u044c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438\u043b\u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043e\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043d\u0435\u043a\u0438\u043c \u00abLogo\u00bb, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u0441 \u043d\u0435\u043a\u0438\u043c \u00abArt\u00bb.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3041\/\">V3041<\/a> The expression was implicitly cast from &#8216;int&#8217; type to &#8216;double&#8217; type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) \/ Y;. LiveTvManager.cs 1085<\/p>\n<pre><code class=\"cs\">private async Task RefreshChannelsInternal(....) {   ....   double progressPerService = _services.Length == 0                 ? 0                 : 1 \/ _services.Length;   .... }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0447\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>progressPerService <\/i> \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u0430 1.0 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 <i>_services.Length = 1<\/i>. \u041f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 <i>_services.Length<\/i> \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u0441\u044f <i>0.0<\/i>.<\/p>\n<p>  \u0412\u0438\u0434\u0438\u043c\u043e, \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">double progressPerService = _services.Length == 0                 ? 0                 : (double)1 \/ _services.Length;<\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3050\/\">V3050<\/a> Possibly an incorrect HTML. The &lt;\/u&gt; closing tag was encountered, while the &lt;\/i&gt; tag was expected. SrtParserTests.cs 64<\/p>\n<pre><code class=\"cs\">public void TestParse() {   var expectedSubs =     new SubtitleTrackInfo     {       TrackEvents = new SubtitleTrackEvent[]        {         ....         new SubtitleTrackEvent          {           Id = \"6\",           StartPositionTicks = 330000000,           EndPositionTicks = 339990000,           Text =               \"This contains nested &lt;b&gt;bold,                &lt;i&gt;italic, &lt;u&gt;underline&lt;\/u&gt; and               &lt;s&gt;strike-through&lt;\/s&gt;&lt;\/u&gt;&lt;\/i&gt;&lt;\/b&gt; HTML tags\"         },         ....       }     }; }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 <\/p>\n<pre><code class=\"cs\">&lt;u&gt;underline&lt;\/u&gt;<\/code><\/pre>\n<p>  \u0412 \u043d\u0435\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u0435\u0433 <i>&lt;\/u&gt;<\/i>. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442:  <\/p>\n<pre><code class=\"cs\">&lt;\/s&gt;&lt;\/u&gt;&lt;\/i&gt;&lt;\/b&gt; HTML tags\"<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u0435\u0433 <i>&lt;\/u&gt; <\/i>\u043b\u0438\u0448\u043d\u0438\u0439, \u043d\u0430 \u0447\u0442\u043e \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<br \/>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/b> <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3051\/\">V3051<\/a> An excessive type check. The object is already of the &#8216;Exception&#8217; type. SmbFileInputStream.cs 107<\/p>\n<pre><code class=\"cs\">protected internal virtual IOException SeToIoe(SmbException se) {   IOException ioe = se;   Exception root = se.GetRootCause();   if (root is TransportException)   {     ioe = (TransportException)root;     root = ((TransportException)ioe).GetRootCause();   }   if (root is Exception)   {     ioe = new IOException(root.Message);     ioe.InitCause(root);   }   return ioe; }<\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u0443\u0442, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 <i>if<\/i> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <i>root <\/i> \u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0436\u0435 \u0442\u0438\u043f\u043e\u043c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043d \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043c\u044b\u0441\u043b\u0430\u0445 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f Emby (\u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 215 539 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, 4,6% \u2014 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438). \u041e\u043d\u0438 \u043c\u043e\u043b\u043e\u0434\u0446\u044b, \u043f\u0440\u0430\u0432\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f, \u0432\u044b\u0434\u0430\u0432 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 <a href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/#ID0EDAAE\">\u0443\u0440\u043e\u0432\u043d\u044f<\/a> High \u2013 113, Medium \u2013 213 \u0438 Low \u2013 112. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u0445\u043e\u0436\u0438 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u043d\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v3022\/\">V3022<\/a> (\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u0436\u043d\u043e\/\u0438\u0441\u0442\u0438\u043d\u043d\u043e) \u043d\u0430\u0431\u0440\u0430\u043b\u043e\u0441\u044c 106 \u0448\u0442\u0443\u043a. \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0431\u044b\u043b\u0430 \u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e, \u043d\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442.<\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u0443 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0435\u0434\u0438\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &#171;<a href=\"https:\/\/www.viva64.com\/ru\/b\/0594\/\">Godot: \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u043a\u043e\u0434\u0430<\/a>&#171;.<\/p>\n<p><a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/484046\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/898\/3b6\/5a7\/8983b65a74adb29a2113eba12fbec3f1.png\" align=\"left\"><\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Ekaterina Nikiforova. <a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/484046\/\">Checking Emby with PVS-Studio<\/a>.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/484050\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/484050\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/484050\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rr\/ar\/h3\/rrarh3smm2vkgpopwdn2fgqan0s.png\" alt=\"Picture 3\"><\/div>\n<p>  Emby \u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u0434\u0438\u0430\u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 Plex \u0438 Kodi. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio. \u041d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 Emby \u0435\u0441\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u043e\u043c\u0435\u0442\u043e\u0447\u043a\u0430 \u00abBuilt with ReSharper\u00bb. \u0427\u0442\u043e \u0436\u0435, \u0442\u0430\u043a \u0434\u0430\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-297180","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/297180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=297180"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/297180\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=297180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=297180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=297180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}