рдПрдордмреА Plex рдФрд░ рдХреЛрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдордмреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирд┐рд╢рд╛рди рд╣реИ "рдмрд┐рд▓реНрдЯ рд╡рд┐рде рд░реЗрд╕реНрдкрд░рд░"ред рдЦреИрд░, рдпрд╣ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╕реА, рд╕реА ++, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рдПред
рдЕрдВрдХреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛
Emby рдПрдХ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб
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ред = '' <'' рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рд╢рд╛рдпрдж рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ, рдФрд░
'<' рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХреБрдЫ рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдпрд╛, рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЙрдкрд╕рдВрдЪрд╛рдИ рдЕрддрд┐рд░реЗрдХ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'SmbConstants.AttrHidden' рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ '|' рдСрдкрд░реЗрдЯрд░ред SmbComDelete.cs 29
internal SmbComDelete(string fileName) { Path = fileName; Command = SmbComDelete; _searchAttributes = SmbConstants.AttrHidden | SmbConstants.AttrHidden | SmbConstants.AttrSystem; }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рд╕рдмрдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдПрдХ рдЯрд╛рдЗрдкреЛ рдкрд╛рдпрд╛ред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд╛рдкрд░рд╡рд╛рд╣реА рд╕реЗ рдереЛрдбрд╝реА рдмрд╣реБрдд рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВред рдореИрдВ рдПрдордмреА рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдлрдЯрдХрд╛рд░рддрд╛, рд╣рдо рдХрднреА-рдХрднреА рдЗрд╕ рддрд░рд╣ (
рдЙрджрд╛рд╣рд░рдг ,
рдЙрджрд╛рд╣рд░рдг ,
рдЙрджрд╛рд╣рд░рдг ) рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: 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 {
рдФрд░ рдпрд╣ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдХрд╛рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
рдЕрдЧрд░ рдФрд░
рдЕрдиреНрдп рдмреНрд▓реЙрдХ рдмреЙрдбреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╣реИрдВред рдЖрдкрдХреЛ
рдЯрд╛рдЗрдкрдЯрд╛рдЙрди рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдЕрдЧрд░, рдЗрд╕рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХ рд╣реА рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3005 '_validProviderIds' рдЪрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред BaseNfoParser.cs 77
private Dictionary<string, string> _validProviderIds; .... public void Fetch(....) { .... _validProviderIds = _validProviderIds = new Dictionary<....>(....); .... }
рдлрд┐рд░ рд╕реЗ, рдПрдХ рдЯрд╛рдЗрдкреЛ, рдЬрд┐рд╕рдиреЗ рд╕реНрд╡рдпрдВ рдХреЛ рдПрдХ рдЪрд░ рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджрд┐рдпрд╛ред рдпрд╣ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд░реАрдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3008 'рдЪреИрдкреНрдЯрд░' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 29, 28. рд╢реАрд░реНрд╖рдХ редcs 29
public Title(uint titleNum) { ProgramChains = new List<ProgramChain>(); Chapters = new List<Chapter>(); Chapters = new List<Chapter>(); TitleNumber = titleNum; }
Inattention рдФрд░ typos, рдлрд┐рд░ рд╕реЗ ... рдЪрд░
рдЕрдзреНрдпрд╛рдп рджреЛ рдмрд╛рд░ рдПрдХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд╕реЗ рдХреБрдЫ рднреА рдмреБрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЦрддрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3013 рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИ рдХрд┐ 'Read' рдлрдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ 'Write' рдлрдВрдХреНрд╢рди (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; } } }
рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдЪреЗрддрд╛рд╡рдиреА рдкрд╛рда рджреНрд╡рд╛рд░рд╛ рд╕рдмреВрдд рдХреЗ рд░реВрдк рдореЗрдВ
рдкрдврд╝реЗрдВ рдФрд░
рд▓рд┐рдЦреЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рдХрд╛рдп рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВред
Enter рдореЛрдб рдореЗрдВ рд▓реЙрдХ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
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"); } .... }
рдпрд╣рд╛рдБ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдкрд╣рд▓реЗ рдЪрд╛рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди
рдЗрдирдкреБрдЯрдкрде рд╕реЗ
рдЖрдЙрдЯрдкреБрдЯрдкрде рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЪрд░ рдХреЛ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рдХреЛрдб рдореЗрдВ рдХрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ
null рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд┐рдирд╛
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 рд▓рд╛рдЗрдиреЛрдВ рдкрд░ 13 рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИрдВ (рд╣рд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ)ред рдЗрд╕рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдлреНрд░реЗрдоред Ssppressed && _compression == CompressionMethod.None рдХреЛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рд╣реИ, рддреЛ ProcessUnsupportedFrame рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреА, рдЬреЛ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЧрд▓рдд рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдкрд╣рд▓реА рдЪреЗрддрд╛рд╡рдиреА)ред рдпрджрд┐ рдпрд╣ рдЧрд▓рдд рдерд╛, рддреЛ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдПрдВред
- рдЗрд╕рдХреЗ рдмрд╛рдж, рдлрд╝реНрд░реЗрдо рдХрд╛ рдорд╛рдиред рдПрд╕рдлрд╝реНрд░реЗрдЧреНрдореЗрдВрдЯреЗрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ ред рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
- рдпрд╣рд╛рдБ рдлреНрд░реЗрдо рдХреА рд╡реИрд▓реНрдпреВ .DData рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ ред рдпрджрд┐ рд╕рд╣реА рд╣реИ, рддреЛ processDataFrame рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реЛ рдЬрд╛рдПрдЧреАред рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреАред
- рдлрд┐рд░ рд╣рдо рдлреНрд░реЗрдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ ред рд╕рдЪ - processPingFrame рд╕рд╣реА рд▓реМрдЯреЗрдЧрд╛ред рдпрд╣ рддреАрд╕рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИред
- рд╣рдо рдлреНрд░реЗрдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ ред рд╕рдм рдХреБрдЫ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред
- рдФрд░ рдЖрдЦрд┐рд░реА рдПрдХ: рдлреНрд░реЗрдо ред processCloseFrame рдФрд░ processUnsupportedFrame рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрд▓рдд рд╣реИ ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдмреЛрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рдЖрдЧреЗ рд╕рд░рд▓ рд╣реЛрдЧрд╛ред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: 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 рдЕрдиреБрдкрдпреЛрдЧреА рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред HdHomerunHost.cs 621
protected override async Task<ILiveStream> GetChannelStream(....) { .... var enableHttpStream = true; if (enableHttpStream) { mediaSource.Protocol = MediaProtocol.Http; var httpUrl = channelInfo.Path;
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреНрдпреЛрдВ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ enableHttpStream рдЪрд░ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рддреБрд░рдВрдд рдЗрд╕ рдХрдерди рдореЗрдВ рдЗрд╕ рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ?
рд╢рд╛рдпрдж рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рдмреЗрдорд╛рдиреА рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рджреЛрд╣рд░реА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3083 'RefreshStarted', NullReferenceException рдШрдЯрдирд╛ рдХрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╣реНрд╡рд╛рди рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдШрдЯрдирд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред ProviderManager.cs 943
public void OnRefreshStart(BaseItem item) { .... if (RefreshStarted != null) { RefreshStarted(this, new GenericEventArgs<BaseItem>(item)); } }
рдпрд╣ рд╡рд┐рдзрд┐
RefreshStarted рдИрд╡реЗрдВрдЯ
рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдореИрдВ
рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕ рдХреЙрд▓ рдХреЛ рдХреЛрдб рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдореЗрдВ
RefreshStarted рдорд╛рдирд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП,
рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдФрд░ рд╕реАрдзреЗ рд╢рд░реАрд░ рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдХреЗ рд╕рдордп рдореЗрдВ, рдПрдХ рдЕрдиреНрдп рдереНрд░реЗрдб рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╕реЗ рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдФрд░, рдЕрдЧрд░ рдЕрдзрд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ
RefreshStarted рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕реВрддреНрд░ рдореЗрдВ, рдЬрд╣рд╛рдВ рдПрдХ
рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХреА рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреА:
RefreshStarted(this, new GenericEventArgs<BaseItem>(item));
рдпрд╣ рдПрдХ
NullReferenceException рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3029 рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреА рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╕рдорд╛рди рд╣реИрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 142, 152. рд▓реЛрдХрд▓рдЗрдореЗрдЬрдкреНрд░реЛрд╡рд╛рдЗрдбрд░.рдХреЗрдПрд╕ 142
private void PopulateImages(....) { ....
рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рджреЛ рд╣реИрдВ
рдпрджрд┐ рд╕рдорд╛рди рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде
рдмрдпрд╛рди ред
рдЕрдЧрд░ рдмрдпрд╛рдиреЛрдВ рдХреЗ рдирд┐рдХрд╛рдп рдЕрд▓рдЧ рд╣реИрдВред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ рдпрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдбред рд╢рд╛рдпрдж рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдФрд░ рд▓реЗрдЦрдХ рдХреЗрд╡рд▓ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рд▓реЛрдЧреЛ" рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рдХрд▓рд╛" рдХреЗ рд╕рд╛рдеред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V3041 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'int' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдбрдмрд▓' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; LiveTvManager.cs 1085
private async Task RefreshChannelsInternal(....) { .... double progressPerService = _services.Length == 0 ? 0 : 1 / _services.Length; .... }
рдЗрд╕ рдХреЛрдб рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмреЗрд╣рдж рд╕рдВрджрд┐рдЧреНрдз рд╣реИред
рджрд░рдЕрд╕рд▓, рд╡реЗрд░рд┐рдПрдмрд▓
рдкреНрд░реЛрдЧреНрд░реЗрд╕рдкрд░реНрд╕ рд╕рд░реНрд╡рд┐рд╕ 1.0 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реА рд╣реЛрдЧреА рдЕрдЧрд░
_services.Length = 1 рд╣реЛ ред рдХрд┐рд╕реА рднреА рдЕрдиреНрдп
_services.Length рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо
0.0 рд╣реЛрдЧрд╛ред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдпрд╣рд╛рдБ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
double progressPerService = _services.Length == 0 ? 0 : (double)1 / _services.Length;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: 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> рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рд╡реА 3051 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪред рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЕрдкрд╡рд╛рдж' рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред 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 рдЯреБрдХрдбрд╝реЗ рдХрд┐рдПред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдерд╛, рдФрд░ рдмрд╛рдХреА рд▓реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдЙрдмрд╛рдК рдкрд╛рда рд╣реЛрдЧрд╛ рдЬреЛ рдХреЛрдИ рднреА рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛ред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдмреЗрд╢рдХ, рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рд╕реНрдерд╛рдпреА рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк
рдЧреЛрдбреЛрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
: рд╕реНрдЯреЗрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рд▓реЗрдЦ
рдХреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдкрд░ ред

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