рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрдореНрдмреА рдХреА рдЬрд╛рдБрдЪ

рдЪрд┐рддреНрд░ 3

рдПрдореНрдмреА Plex рдФрд░ рдХреЛрдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ PVS-Studio рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЧрдП рдмрдЧреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ "рдмрд┐рд▓реНрдЯ рд╡рд┐рде рд░реЗрд╕реНрдкрд░рд░" рдЯрд┐рдкреНрдкрдгреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рддреА рд╣реИред

рдкреА рд╡реА рдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ


рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ 64-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ C, C ++, C # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдмрдЧреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рддрд╣рдд рдкрд░рд┐рдпреЛрдЬрдирд╛


рдПрдореНрдмреА рдПрдХ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реИ; рдЗрд╕рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдкрдиреА рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА (рд╡реАрдбрд┐рдпреЛ, рдСрдбрд┐рдпреЛ, рдлреЛрдЯреЛ) рдХреЛ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдореНрдмреА рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ:

  • рдПрдореНрдмреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдореАрдбрд┐рдпрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордХреНрдЦреА рдкрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдФрд░ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • рдЖрд╕рд╛рди рд╕рд╛рдордЧреНрд░реА рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рдЕрднрд┐рднрд╛рд╡рдХреАрдп рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдХрд▓реНрдк, рдЬреЛ рдЫреЛрдЯреЗ рдмрдЪреНрдЪреЛрдВ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ;
  • рдПрдореНрдмреА рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрд╕рд╛рди рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореАрдбрд┐рдпрд╛ рдХрднреА рднреА рдПрдХ рдЬреИрд╕рд╛ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛;
  • рдХреНрд▓рд╛рдЙрдб рд╕рд┐рдВрдХ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ;
  • рдЕрдкрдиреЗ рджреЛрд╕реНрддреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрд╕рд╛рди рд╕рд╛рдЭрд╛рдХрд░рдг;
  • рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред

рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛


PVS-Studio рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ c! = '' <'' рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ '&&' рдСрдкрд░реЗрдЯрд░ред HttpListenerRequest.Managed.cs 49

internal void SetRequestLine(string req) { .... if ((ic >= 'A' && ic <= 'Z') || (ic > 32 && c < 127 && c != '(' && c != ')' && c != '<' && // <= c != '<' && c != '>' && c != '@' && c != ',' && c != ';' && // <= c != ':' && c != '\\' && c != '"' && c != '/' && c != '[' && c != ']' && c != '?' && c != '=' && c != '{' && c != '}')) continue; .... } 

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдиреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдм-рдбреЗрдкреНрд░рд┐рд╕рд┐рдПрд╢рди c = = '<' рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИред рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд▓рддреА рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЕрд░реНрде '<' рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣реИред рдПрдХ рдФрд░, рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдпрд╣ рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ рд╕рдмрдкреНрд░реЗрдкреНрд░реЗрд╢рди рдХрд╛ рдорддрд▓рдм рд╡рд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

PVS-Studio рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢: V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'SmbConstants.AttrHidden' рдмрд╛рдИрдВ рдУрд░ рдФрд░ 'рджрд╛рдИрдВ рдУрд░' рдХреЗ рд▓рд┐рдПред рдСрдкрд░реЗрдЯрд░ред SmbComDelete.cs 29

 internal SmbComDelete(string fileName) { Path = fileName; Command = SmbComDelete; _searchAttributes = SmbConstants.AttrHidden | SmbConstants.AttrHidden | SmbConstants.AttrSystem; } 

рдПрдХ рдФрд░ рдЯрд╛рдЗрдкреЛ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдмрдЯреЗрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдореНрдмреА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЗ рд╣реИрдВ - рдЕрд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЧрд▓рддрд┐рдпрд╛рдБред рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рджреЛрд╖ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ; рд╣рдо рд╕рднреА рдХрдИ рдмрд╛рд░ рдЕрдиреБрдкрд╕реНрдерд┐рдд-рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ( рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг , рдЙрджрд╛рд╣рд░рдг ), рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореМрдЬреВрдж рд╣реИ - рд╣рдореЗрдВ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред SqliteItemRepository.cs 5648

 private QueryResult<Tuple<BaseItem, ItemCounts>> 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 + "))"; } .... } 

рдФрд░ рдпрд╣ рдПрдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдмрдЧ рдХреА рддрд░рд╣ рдмрд╣реБрдд рджрд┐рдЦрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдФрд░ рдХрд┐рд╕реА рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рд╣реА рдмреЙрдбреА рд╣реИред рдпрджрд┐ рдпрд╣ рдмрд╛рдж рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рддрд░реНрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЯрд╛рдЗрдкрдЯрд╛рдЙрди рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ? рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд▓реЗрдЦрдХ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3005 '_validProviderIds' рдЪрд░ рдХреЛ рд╣реА рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред BaseNfoParser.cs 77

 private Dictionary<string, string> _validProviderIds; .... public void Fetch(....) { .... _validProviderIds = _validProviderIds = new Dictionary<....>(....); .... } 

рдПрдХ рдЕрдиреНрдп рдЯрд╛рдЗрдкреЛ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдЪрд░ рдХрд╛ рдЕрдкрдирд╛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3008 'рдЪреИрдкреНрдЯрд░' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 29, 28. рд╢реАрд░реНрд╖рдХ редcs 29

 public Title(uint titleNum) { ProgramChains = new List<ProgramChain>(); Chapters = new List<Chapter>(); Chapters = new List<Chapter>(); TitleNumber = titleNum; } 

рдпрд╣ рдЕрд╕рд╛рд╡рдзрд╛рдиреА рдФрд░ рдЯрд╛рдЗрдкреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ ... рдЪреИрдкреНрдЯрд░ рдЪрд░ рдХреЛ рджреЛ рдмрд╛рд░ рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдкрд░ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3013 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ 'рд░реАрдб' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ 'рд░рд╛рдЗрдЯ' рдлрд╝рдВрдХреНрд╢рди (407, рд▓рд╛рдЗрди 415) рдХреЗ рд╢рд░реАрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред BaseSqliteRepository.cs 407

 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; } } } 

рдХрд╛рд░реНрдп рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ рдореЗрдВ рдПрдХ рд╣реА рдирд┐рдХрд╛рдп рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдореЗрдВ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВред EnterWriteLock рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЦрди рдореЛрдб рдореЗрдВ рд▓реЙрдХ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд░реАрдб рдореЛрдб рдореЗрдВ рд▓реЙрдХ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ EnterReadLock рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдмрдЧ рд╣реЛрдиреЗ рдХреА рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рд╕рднреА рдЕрдзрд┐рдХ рдЗрд╕рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд░реНрдЧ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 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; } } } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3021 рд╕рдорд╛рди рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ 'рдпрджрд┐' рдХрдерди рд╣реИрдВред рдкрд╣рд▓реЗ 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдореЗрдердб рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ 'рдЕрдЧрд░' рдХрдерди рд╕рдВрд╡реЗрджрдирд╣реАрди рд╣реИ SkiaEncoder.cs 537

 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"); } .... } 

рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдкрд╣рд▓реЗ рдЪрд╛рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрдирдкреБрдЯрдкрде рд╕реЗ рдЖрдЙрдЯрдкреБрдЯрдкрд╛рде рдореЗрдВ рдЪреЗрдХ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЪрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдРрд╕реА рдХрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд╣рд╛рдБ рдкрд░ рдЖрдЙрдЯрдкреБрдЯрдкрд╛рдЙрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреВрд░реНрд╡ рдЬрд╛рдВрдЪ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢:

  • V3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'processUnsupportedFrame (рдлрд╝реНрд░реЗрдо, CloseStatusCode.PolicyViolation, null)' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИред WebSocket.cs 462
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'processCloseFrame (рдлреНрд░реЗрдо)' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред WebSocket.cs 461
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдлреНрд░реЗрдоред processCloseFrame (рдлрд╝реНрд░реЗрдо): processUnsupportedFrame (рдлрд╝реНрд░реЗрдо, CloseStatusCode.PolicyViolation, null) 'рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред WebSocket.cs 460
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдкреНрд░рдХреНрд░рд┐рдпрд╛рдкреЛрдВрдЧрдлреНрд░реЗрдо (рдлреНрд░реЗрдо)' рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддреА рд╣реИред WebSocket.cs 459
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'processPingFrame (рдлреНрд░реЗрдо)' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред WebSocket.cs 457
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'processDataFrame (рдлреНрд░реЗрдо)' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред WebSocket.cs 455
  • V3022 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред WebSocket.cs 448

 private bool processWebSocketFrame(WebSocketFrame frame) { return frame.IsCompressed && _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; } 

рдореИрдВрдиреЗ рдЕрдм рддрдХ рдЕрдкрдиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯреАрдо рдХреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ, рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрднреА 13 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗрдЦрд╛, рдЬреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ 7 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ (рдпрд╛рдиреА рдкреНрд░рддрд┐ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЪреЗрддрд╛рд╡рдиреА)ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдиреАрдЪреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИред

  1. рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдлреНрд░реЗрдо .sCompressed рдФрд░& _compression == CompressionMethod.None рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рддреЛ ProcessUnsupportedFrame рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдФрд░ рдЧрд▓рдд рд▓реМрдЯреЗрдЧреА (рдпрд╣ рдкрд╣рд▓реА рдЪреЗрддрд╛рд╡рдиреА рд╣реИ)ред рдпрджрд┐ рдЪреЗрдХ рдЧрд▓рдд рд╣реИ , рддреЛ рд╣рдо рдЕрдЧрд▓реЗ рдПрдХ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред
  2. рдорд╛рди рдлрд╝реНрд░реЗрдо ред IFragmented рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдБ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
  3. рдорд╛рди рдлрд╝реНрд░реЗрдо ред IDData рдЬрд╛рдБрдЪ рдХреА рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ processDataFrame рд╡рд┐рдзрд┐ рд╕рд╣реА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдпрд╣ рджреВрд╕рд░реА рдЪреЗрддрд╛рд╡рдиреА рд╣реИред
  4. рдорд╛рди рдлрд╝реНрд░реЗрдо ред IPPing рдЬрд╛рдБрдЪ рдХреА рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рддреЛ ProcessPingFrame рд╡рд┐рдзрд┐ рд╕рд╣реА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдпрд╣ рддреАрд╕рд░реА рдЪреЗрддрд╛рд╡рдиреА рд╣реИред
  5. рдорд╛рди рдлрд╝реНрд░реЗрдо ред IPong рдЬрд╛рдБрдЪ рдХреА рд╣реИред рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рдиред
  6. рдЕрдВрддрд┐рдо рдПрдХ: рдлреНрд░реЗрдо ред processCloseFrame рдФрд░ processUnsupportedFrame рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрд▓рдд рд╣реИред

рдЪрд┐рддреНрд░ 1

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рдерд╛ред рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдЙрд╕ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3085 рдиреЗрд╕реНрдЯреЗрдб рдкреНрд░рдХрд╛рд░ рдореЗрдВ 'RtpHeaderBytes' рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдмрд╛рд╣рд░реА рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рдорд░реВрдк рдХреНрд╖реЗрддреНрд░ рд╕рдорд░реВрдк рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред HdHomerunUdpStream.cs 200

 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; .... } .... } 

рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓рд╛рд╕ UdpClientStream рдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдПрдиреНрдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ рдХреНрд▓рд╛рд╕ HdHomerunUdpStream рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИред рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рдЪрд░ рд╣реЛрдиреЗ рд╕реЗ рдЧрд▓рддреА рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рд╢рдмреНрдж рднреА рдирд╣реАрдВ рдХрд╣реЗрдЧрд╛ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢:

  • рдПрдХ рдкреНрд░рдХрд╛рд░ рдкрд░ V3090 рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЙрдХрд┐рдВрдЧред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╛рди 'рдкреНрд░рдХрд╛рд░' рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ред Lmhosts.cs 49
  • рдПрдХ рдкреНрд░рдХрд╛рд░ рдкрд░ V3090 рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЙрдХрд┐рдВрдЧред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╛рди 'рдкреНрд░рдХрд╛рд░' рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ред Lmhosts.cs 57

 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)) { .... } } } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣рд╛рдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЧрддрд┐рд░реЛрдз рдкреИрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 private Object locker = new Object(); public static NbtAddress GetByName(string host) { lock (locker) { return GetByName(new Name(host, 0x20, null)); } } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдореИрд╕реЗрдЬ: V3142 Unreacheble рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред HdHomerunHost.cs 621

 protected override async Task<ILiveStream> 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) && !string.Equals(profile, "native", StringComparison.OrdinalIgnoreCase)) { httpUrl += "?transcode=" + profile; } mediaSource.Path = httpUrl; return new SharedHttpStream(....); } return new HdHomerunUdpStream(....); } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рдФрд░ рдЪрд░ enableHttpStream рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ, рдЗрд╕реЗ рд╕рд╣реА рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдВрдЪрдирд╛?

рд╢рд╛рдпрдж рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рдмреЗрдорд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдореИрд╕реЗрдЬ: V3083 рдЗрд╡реЗрдВрдЯ 'рд░реАрдлреНрд░реЗрд╢рд╕реНрдЯрд╛рд░реНрдЯреЗрдб' рдХрд╛ рдЕрдирд╕реЗрдл рдЗрдирд╡реЛрдХреЗрд╢рди, NullReferenceException рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред ProviderManager.cs 943

 public void OnRefreshStart(BaseItem item) { .... if (RefreshStarted != null) { RefreshStarted(this, new GenericEventArgs<BaseItem>(item)); } } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдореЗрдВ рд░реАрдлрд╝реНрд░реЗрд╢рд╕реНрдЯрд╛рд░реНрдЯ рдХрд┐рдП рдЧрдП рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред

рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣ рдХреЙрд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрдпреЛрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рд╕реЗ рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдФрд░ рдЕрдЧрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪред рдпрджрд┐ рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рддреЛ RefreshStarted рдИрд╡реЗрдВрдЯ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЬрд╣рд╛рдВ рдирд▓ рдЪреЗрдХ рдкрд╣рд▓реЗ рд╣реА рдкрд╛рд╕ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдХреЙрд▓ рдХреЛ рд╡реИрд╕реЗ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 RefreshStarted(this, new GenericEventArgs<BaseItem>(item)); 

рдпрд╣ рдПрдХ NullReferenceException рдХреЛ рдлреЗрдВрдХрдиреЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3029 рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд 'рдЕрдЧрд░' рдХрдерди рдХреА рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╕рдорд╛рди рд╣реИрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 142, 152. рд▓реЛрдХрд▓рдЗрдореЗрдЬрдкреНрд░реЛрд╡рд╛рдЗрдбрд░.рдХреЗрдПрд╕ 142

 private void PopulateImages(....) { .... // Logo if (!isEpisode && !isSong && !isPerson) { added = AddImage(....); if (!added) { added = AddImage(....); } } // Art if (!isEpisode && !isSong && !isPerson) { AddImage(....); } .... } 

рдпрджрд┐ рдмрдпрд╛рди рдореЗрдВ рджреЛ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╢рд░реАрд░ рдЕрд▓рдЧ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рдпрд╛ рд╕рд┐рд░реНрдл рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдареАрдХ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ "рд▓реЛрдЧреЛ" рдФрд░ рджреВрд╕рд░реЗ рдХреЛ "рдХрд▓рд╛" рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рднреА рд╣реИрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3041 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'рдЗрдВрдЯ' рдЯрд╛рдЗрдк рд╕реЗ 'рдбрдмрд▓' рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; LiveTvManager.cs 1085

 private async Task RefreshChannelsInternal(....) { .... double progressPerService = _services.Length == 0 ? 0 : 1 / _services.Length; .... } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдорд╛рди рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣реА рдЪреАрдЬрд╝ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, progressPerService рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдорд╛рди 1.0 рд╣реЛрдЧрд╛ рддрднреА рд╣реЛрдЧрд╛ рдЬрдм _services.Length = 1 рд╣реЛ ред _Services.Length рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде , рдкрд░рд┐рдгрд╛рдо 0.0 рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЬреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

 double progressPerService = _services.Length == 0 ? 0 : (double)1 / _services.Length; 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3050 рд╕рдВрднрд╡рддрдГ рдПрдХ рдЧрд▓рдд HTML рд╣реИред </ U> рд╕рдорд╛рдкрди рдЯреИрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрдмрдХрд┐ </ i> рдЯреИрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред SrtParserTests.cs 64

 public void TestParse() { var expectedSubs = new SubtitleTrackInfo { TrackEvents = new SubtitleTrackEvent[] { .... new SubtitleTrackEvent { Id = "6", StartPositionTicks = 330000000, EndPositionTicks = 339990000, Text = "This contains nested <b>bold, <i>italic, <u>underline</u> and <s>strike-through</s></u></i></b> HTML tags" }, .... } }; } 

рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

 <u>underline</u> 

рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрдВрдж рдЯреИрдЧ </ u> рд╣реИ ред
рдлрд┐рд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рда рджреЗрдЦрддреЗ рд╣реИрдВ:
 </s></u></i></b> HTML tags" 

рдпрд╣рд╛рдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдорд╛рдкрди рдЯреИрдЧ </ u> рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрддрд╛рддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЕрдкрд╡рд╛рдж' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред SmbFileInputStream.cs 107

 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; } 

рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕ рдХреЛрдб рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рджреВрд╕рд░реА рд╡рд╕реНрддреБ рдХреА рдЬрдбрд╝ рдХреЗ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдкрд░ рдмрдпрд╛рди рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдВрдЪрддреА рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдмреЗрдорд╛рдиреА рдХреЛрдб рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдПрдореНрдмреА рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╣рд░ рддрд░рд╣ рд╕реЗ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ (рдкрд░рд┐рдпреЛрдЬрдирд╛ 215,539 рдПрд▓рдУрд╕реА рд▓рдВрдмреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ 4.6% рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ)ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИред рд▓реЗрдХрд┐рди рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рднреА рдкреНрд░рд╢рдВрд╕рд╛ рдХреЗ рдкрд╛рддреНрд░ рд╣реИрдВ: рдЗрд╕рдиреЗ 113 рдЙрдЪреНрдЪ- рд╕реНрддрд░ , 213 рдордзреНрдпрдо-рд╕реНрддрд░ рдФрд░ 112 рдирд┐рдореНрди-рд╕реНрддрд░ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдереЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, V3022 рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ (рд╣рдореЗрд╢рд╛ рдЭреВрдареА / рд╕рдЪреНрдЪреА рд╕реНрдерд┐рддрд┐) рдЕрдХреЗрд▓реЗ 106 рдмрд╛рд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмреЗрд╢рдХ, рдореИрдВ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЪреАрдЬреЛрдВ рдХреЛ рдЫрд╛рди рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдмрд╛рдХреА рдХреЛ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реЛ рдЬрд╛рддрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ; рдЖрдкрдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ " рдЧреЛрдбреЛрдЯ: рдСрди рд░реЗрдЧреБрд▓рд░ рдпреВрдЬрд╝ рдСрдл рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд┐рд╕рд░реНрд╕ " рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

Source: https://habr.com/ru/post/hi484046/


All Articles