{"id":359153,"date":"2024-05-21T00:26:35","date_gmt":"2024-05-21T00:26:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=359153"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=359153","title":{"rendered":"<span>Microsoft PowerToys: \u041a\u043e\u0440\u043e\u043b\u044c GitHub \u0441\u0440\u0435\u0434\u0438 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 C++ \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>Microsoft PowerToys \u2013 \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041e\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Windows, \u043d\u043e \u0438 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u043e\u0432\u044b\u0435. \u0410 \u0435\u0449\u0435 \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0442\u043e\u043f\u0430 \u043f\u043e \u0437\u0432\u0435\u0437\u0434\u0430\u043c \u043d\u0430 GitHub \u0441\u0440\u0435\u0434\u0438 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0438\u0448\u0443\u0442 \u043a\u043e\u0434 \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0438 \u0443\u0437\u043d\u0430\u0435\u043c, \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c C++!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a7\/75d\/501\/6a775d501f2a27ee87abd226b1faccbe.png\" alt=\"1078_PowerToys_ru\/image1.png\" title=\"\" width=\"1600\" height=\"902\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a7\/75d\/501\/6a775d501f2a27ee87abd226b1faccbe.png\"\/><\/figure>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u044d\u0442\u0438\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. Microsoft PowerToys \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Windows, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438. \u042f, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u0430\u043a\u0436\u0435 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0441\u0442\u0430\u043b\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 &#8216;What&#8217;s using this file?&#8217;. \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0443\u0431\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0444\u0430\u0439\u043b\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f Open Source \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 Microsoft. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 95 \u0442\u044b\u0441\u044f\u0447 \u0437\u0432\u0451\u0437\u0434 \u043d\u0430 GitHub. \u042d\u0442\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u043a\u043e\u0440\u043e\u043b\u044c \u0441\u0440\u0435\u0434\u0438 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u0440\u0438 \u0447\u0451\u043c \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0421++? \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: C# \u2013 60%, \u0421++ \u2013 \u043f\u043e\u0447\u0442\u0438 40%.<\/p>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 PowerToys \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0442\u0430\u043a \u043b\u0438 \u044d\u0442\u043e. \u0412\u043e\u043e\u0440\u0443\u0436\u0438\u043c\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c PVS-Studio \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u043e\u0441\u0441-\u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0434\u0430. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0443 \u043d\u0430\u0441 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u043d\u0435 \u0447\u0430\u0441\u0442\u043e. \u0414\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043e\u0442\u0447\u0451\u0442\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043b\u0430\u0433\u0438\u043d PVS-Studio \u0434\u043b\u044f Visual Studio 2022. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a \u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/595\/915\/5e4\/5959155e404f9dc4e1e7ac456550c13d.png\" alt=\"1078_PowerToys_ru\/image2.png\" title=\"\" width=\"1493\" height=\"823\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/595\/915\/5e4\/5959155e404f9dc4e1e7ac456550c13d.png\"\/><\/figure>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430: C# \u0438 C++. \u0422\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a. \u041d\u043e \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0440\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a \u2014 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c\u0443.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 PowerToys \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e <a href=\"https:\/\/github.com\/microsoft\/PowerToys\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <a href=\"https:\/\/github.com\/microsoft\/PowerToys\/commit\/83f062542778a14d5dd260d0018d3db1f6c84af6\">\u043a\u043e\u043c\u043c\u0438\u0442<\/a>.<\/p>\n<h3>C# \u0447\u0430\u0441\u0442\u044c<\/h3>\n<h4>\u041f\u043e\u0437\u0434\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h4>\n<pre><code class=\"cpp\">public List&lt;Result> Query(Query query) {   bool isGlobalQuery = string.IsNullOrEmpty(query.ActionKeyword);   ....    if (query == null)   {     throw new ArgumentNullException(paramName: nameof(query));   }    \/\/ Happens if the user has only typed the action key so far   if (string.IsNullOrEmpty(query.Search))   {     return new List&lt;Result>();   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3095\/\">V3095<\/a> The &#8216;query&#8217; object was used before it was verified against null. Check lines: 56, 60. Main.cs 56<\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>query<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e <em>null<\/em>. \u0415\u0441\u043b\u0438 <em>query<\/em> \u0440\u0430\u0432\u0435\u043d <em>null<\/em>, \u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <em>ArgumentNullException<\/em>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <em>query<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 <em>ActionKeyword<\/em>. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u0443\u0434\u044c <em>query<\/em> \u0440\u0430\u0432\u0435\u043d <em>null<\/em>, \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442, \u0442.\u043a. \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d <em>NullReferenceException<\/em>.<\/p>\n<pre><code class=\"cpp\">private void SuggestionsList_SelectionChanged(....) {   ListView listview = (ListView)sender;   _viewModel.Results.SelectedItem = (ResultViewModel)listview.SelectedItem;   if (e.AddedItems.Count > 0 &amp;&amp; e.AddedItems[0] != null)   {     ....   }    if (_viewModel.Results != null &amp;&amp;       !string.IsNullOrEmpty(SearchBox.QueryTextBox.Text))   {     ....   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3095\/\">V3095<\/a> The &#8216;_viewModel.Results&#8217; object was used before it was verified against null. Check lines: 542, 563. MainWindow.xaml.cs 542<\/p>\n<p>\u0418 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u043e\u0437\u0434\u0430\u043b\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <em>_viewModel.Results<\/em> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0430 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <em>null<\/em>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043d\u0435\u0442, \u0434\u0435\u0440\u0436\u0438 NRE<\/h4>\n<pre><code class=\"cpp\">public LauncherViewModel(....) {   ....      if (updatingSettingsConfig == null)   {     updatingSettingsConfig = new UpdatingSettings();   }    updatingSettingsConfig = UpdatingSettings.LoadSettings();    if (updatingSettingsConfig.State == ....)   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;updatingSettingsConfig&#8217;. LauncherViewModel.cs 138<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <em>updatingSettingsConfig.<\/em> \u041f\u043e \u043a\u043e\u0434\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <em>updatingSettingsConfig<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <em>null<\/em>, \u0438 \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0432\u043d\u043e <em>null<\/em>, \u0442\u043e \u0432 \u043d\u0435\u0451 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 <em>updatingSettingsConfig<\/em> \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 <em>LoadSettings<\/em>. \u0410 \u0437\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u0434?<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 <em>LoadSettings<\/em>:<\/p>\n<pre><code class=\"cpp\">public static UpdatingSettings LoadSettings() {   FileSystem fileSystem = new FileSystem();   var localAppDataDir = Environment.GetFolderPath(....);   var file = localAppDataDir + SettingsFilePath + SettingsFile;    if (fileSystem.File.Exists(file))   {     try     {       Stream inputStream = fileSystem.File.Open(file, FileMode.Open);       StreamReader reader = new StreamReader(inputStream);       string data = reader.ReadToEnd();       ....     }     catch (Exception)     {}   }    return null; } <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <em>null<\/em>, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u0430 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0432\u0435\u0440\u043d\u0451\u0442 <em>null<\/em>, \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u0441 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">private static int CalculateClosestSpaceIndex(List&lt;int> spaceIndices,                                               int firstMatchIndex) {   if (spaceIndices.Count == 0)   {     return -1;   }   else   {     int? ind = spaceIndices.OrderBy(item => (firstMatchIndex - item))                            .Where(item => firstMatchIndex > item)                            .FirstOrDefault();     int closestSpaceIndex = ind ?? -1;     return closestSpaceIndex;   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3022\/\">V3022<\/a> Expression &#8216;ind&#8217; is always not null. The operator &#8216;??&#8217; is excessive. StringMatcher.cs 230<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;??&#8217; \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a <em>ind<\/em> \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d <em>null<\/em>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0442\u0430\u043a \u043b\u0438 \u044d\u0442\u043e. <em>Ind<\/em> \u0438\u043c\u0435\u0435\u0442 nullable \u0442\u0438\u043f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c <em>null<\/em>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 <em>Ind<\/em>, \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <em>FirstOrDefault<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <em>null<\/em>. \u0414\u0435\u043b\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u043e, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0448\u0438\u0431\u0441\u044f? \u041d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0435 \u0442\u0430\u043a \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 :).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e <em>FirstOrDefault<\/em> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 <em>null<\/em>, \u0430 <em>default(TSource)<\/em>. <em>default(int?)<\/em> \u2013 \u044d\u0442\u043e <em>null<\/em>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <em>TSource<\/em> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <em>int<\/em>, \u0442\u0430\u043a \u043a\u0430\u043a <em>TSource<\/em> \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u043e \u0442\u0438\u043f\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 LINQ \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 <em>spaceIndices<\/em> \u0441 \u0442\u0438\u043f\u043e\u043c <em>List&lt;int><\/em>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 <em>ind<\/em> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d <em>default(int)<\/em>, \u0442.\u0435. 0. \u0410 \u0432\u043e\u0442 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043b\u043e\u0433\u0438\u043a\u0435. \u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0451\u0442 0, \u0430 \u043d\u0435 -1, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d.<\/p>\n<h4>\u0421\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0434\u0432\u0438\u0433\u0438<\/h4>\n<pre><code class=\"cpp\">public static List&lt;PluginPair> AllPlugins {   get   {     ....     try     {       \/\/ Return a comparable produce version.       var fileVersion = FileVersionInfo.GetVersionInfo(x.ExecuteFilePath);       return ((uint)fileVersion.ProductMajorPart &lt;&lt; 48)       | ((uint)fileVersion.ProductMinorPart &lt;&lt; 32)       | ((uint)fileVersion.ProductBuildPart &lt;&lt; 16)       | ((uint)fileVersion.ProductPrivatePart);       }     catch (System.IO.FileNotFoundException)     {       return 0U;     }     ....   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3134\/\">V3134<\/a> Shift by 48 bits is greater than the size of &#8216;UInt32&#8217; type of expression &#8216;(uint)fileVersion.ProductMajorPart&#8217;. PluginManager.cs 62<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3134\/\">V3134<\/a> Shift by 32 bits is greater than the size of &#8216;UInt32&#8217; type of expression &#8216;(uint)fileVersion.ProductMinorPart&#8217;. PluginManager.cs 63<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0438\u043f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u0430 \u0442\u0438\u043f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041a\u043e\u0434 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0440\u044b\u0432\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043b\u044f\u043c\u0431\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u0432\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f. \u0422\u0438\u043f <em>uint<\/em> \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32 \u0431\u0438\u0442\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 48 \u0431\u0438\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0441\u0434\u0432\u0438\u0433\u0443 \u043d\u0430 16. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 32 \u0431\u0438\u0442\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0441\u0434\u0432\u0438\u0433\u0443 \u043d\u0430 0 \u0431\u0438\u0442. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e <em>uint<\/em> \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>ulong<\/em>.<\/p>\n<h4>\u041a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;?.&#8217;<\/h4>\n<pre><code class=\"cpp\">public void Load(IMainView view) {   if (_batch.Files.Count == 0)   {     _batch.Files.AddRange(view?.OpenPictureFiles());   }   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3105\/\">V3105<\/a> The result of null-conditional operator is dereferenced inside the &#8216;AddRange&#8217; method. NullReferenceException is possible. Inspect the first argument &#8216;view?.OpenPictureFiles()&#8217;. MainViewModel.cs 47<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &#8216;?.&#8217; \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <em>AddRange<\/em>. \u042d\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f <em>ICollection&lt;T><\/em>. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">public static void AddRange&lt;T>(this ICollection&lt;T> collection,                                IEnumerable&lt;T> items) {   foreach (var item in items)   {     collection.Add(item);   } } <\/code><\/pre>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>items<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <em>null<\/em>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <em>foreach<\/em>. \u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043c\u043d\u0438\u043c, <em>foreach<\/em> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043d\u0430\u0441 \u043e\u0442 <em>NullReferenceException<\/em>. \u041f\u043e\u043c\u043d\u0438\u043c \u0436\u0435? \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041c\u044b \u0434\u0430\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443: &#171;<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/0832\/\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 ?. \u0432 foreach: \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 NullReferenceException, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>&#171;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b70\/9b1\/a17\/b709b1a17ccfc63c2ffe35a102bbaa38.png\" alt=\"1078_PowerToys_ru\/image3.png\" title=\"\" width=\"580\" height=\"327\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b70\/9b1\/a17\/b709b1a17ccfc63c2ffe35a102bbaa38.png\"\/><\/figure>\n<h3>\u0421++ \u0447\u0430\u0441\u0442\u044c<\/h3>\n<h4>\u0423\u0442\u0435\u0447\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430<\/h4>\n<pre><code class=\"cpp\">void close_settings_window() {   if (g_settings_process_id != 0)   {     HANDLE proc = OpenProcess(PROCESS_TERMINATE, false, g_settings_process_id);     if (proc != INVALID_HANDLE_VALUE)     {       TerminateProcess(proc, 0);     }   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v773\/\">V773<\/a> Visibility scope of the &#8216;proc&#8217; handle was exited without releasing the resource. A resource leak is possible. settings_window.cpp 635<\/p>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0443\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-openprocess\"><em>OpenProcess<\/em><\/a> \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0431\u0438\u0432\u0430\u044e\u0442. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/handleapi\/nf-handleapi-closehandle\"><em>CloseHandle<\/em><\/a> (\u043e \u0447\u0435\u043c Microsoft \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-openprocess#remarks\">\u0440\u0435\u043c\u0430\u0440\u043a\u0430\u0445<\/a> \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>OpenProcess<\/em>). \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0442\u0435\u0447\u043a\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0430.<\/p>\n<h4>\u0411\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">void FancyZonesSettings::LoadSettings() {   ....   if (auto val = values.get_int_value(....))   {     \/\/ Avoid undefined behavior     if (   *val >= 0         || *val &lt; static_cast&lt;int>(OverlappingZonesAlgorithm::EnumElements))     {       auto algorithm = (OverlappingZonesAlgorithm)*val;       if (m_settings.overlappingZonesAlgorithm != algorithm)       {         m_settings.overlappingZonesAlgorithm = algorithm;         NotifyObservers(SettingId::OverlappingZonesAlgorithm);       }     }   }   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v547\/\">V547<\/a> Expression is always true. Settings.cpp 241<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d <em>true<\/em>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>val<\/em> \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e 0 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b <em>EnumElements<\/em> \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <em>OverlappingZonesAlgorithm<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 4. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 <em>val<\/em>, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;&amp;&amp;&#8217; \u0432\u043c\u0435\u0441\u0442\u043e &#8216;||&#8217;.<\/p>\n<h4>\u041d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0439 \u043a\u043e\u0434<\/h4>\n<pre><code class=\"cpp\">void FancyZonesWindowUtils::SizeWindowToRect(HWND window, RECT rect) noexcept {   ....   if ((placement.showCmd != SW_SHOWMINIMIZED) &amp;&amp;       (placement.showCmd != SW_MINIMIZE))   {     placement.showCmd = SW_RESTORE;   }   \/\/ Remove maximized show command to make sure    \/\/ window is moved to the correct zone.   if (placement.showCmd == SW_SHOWMAXIMIZED)   {     placement.showCmd = SW_RESTORE;     placement.flags &amp;= ~WPF_RESTORETOMAXIMIZED;   }   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v547\/\">V547<\/a> Expression &#8216;placement.showCmd == 3&#8217; is always false. WindowUtils.cpp 336<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441 \u0431\u0443\u043b\u0435\u0432\u044b\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 <em>false<\/em>. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0432\u043e\u0451 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 <em>if<\/em>. \u0412 \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u043d\u0430\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">.... #define SW_SHOWMINIMIZED    2 #define SW_SHOWMAXIMIZED    3 .... #define SW_MINIMIZE         6 .... #define SW_RESTORE          9 .... <\/code><\/pre>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 <em>false<\/em>, \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0439\u0434\u0451\u043c \u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e. \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e <em>if<\/em> \u0431\u044b\u043b\u043e <em>true<\/em>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f <em>showCmd<\/em> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u043e 3. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 <em>if<\/em>. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f <em>showCmd<\/em> \u043d\u0435 \u0440\u0430\u0432\u043d\u043e 2 \u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e 6, \u0442\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0435\u043c\u0443 9. \u041b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e 3 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e 2 \u0438 6. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0430\u0432, \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 <em>false<\/em>. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<h4>\u0421\u0430\u043c\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043c\u0438\u0440\u0435 C \u0438 C++<\/h4>\n<pre><code class=\"cpp\">void SetNumLockToPreviousState(....) {     int key_count = 2;     LPINPUT keyEventList = new INPUT[size_t(key_count)]();     memset(keyEventList, 0, sizeof(keyEventList));     .... } <\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 PVS-Studio \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v579\/\">V579<\/a> The memset function receives the pointer and its size as arguments. It is possibly a mistake. Inspect the third argument. KeyboardEventHandlers.cpp 16<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v568\/\">V568<\/a> It&#8217;s odd that &#8216;sizeof()&#8217; operator evaluates the size of a pointer to a class, but not the size of the &#8216;keyEventList&#8217; class object. KeyboardEventHandlers.cpp 16<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v1086\/\">V1086<\/a> A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;keyEventList&#8217;. KeyboardEventHandlers.cpp 16<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u0442\u0435\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0443 \u043d\u0430\u0441 \u0434\u0430\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f: &#171;<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/cpp\/0360\/\">\u0421\u0430\u043c\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043c\u0438\u0440\u0435 \u0421\/\u0421++<\/a>&#171;.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u0437\u0430\u043d\u0443\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 <em>keyEventList<\/em>. \u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2013 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0435\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0443\u043b\u044f\u043c\u0438. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <em>sizeof(keyEventList)<\/em> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u041e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e 4 \u0438\u043b\u0438 8 \u0431\u0430\u0439\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044f\u0432\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u0438\u043b\u0438 8 \u0431\u0430\u0439\u0442:<\/p>\n<pre><code class=\"cpp\">typedef struct tagINPUT {     DWORD   type;      union     {         MOUSEINPUT      mi;         KEYBDINPUT      ki;         HARDWAREINPUT   hi;     } DUMMYUNIONNAME; } INPUT, *PINPUT, FAR* LPINPUT; <\/code><\/pre>\n<h4>\u0418\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h4>\n<pre><code class=\"cpp\">int WINAPI wWinMain(....) {   \/\/ Start a thread to listen on the events.   m_reparent_event_handle = CreateEventW(....);   m_thumbnail_event_handle = CreateEventW(....);   m_exit_event_handle = CreateEventW(....);   if (   !m_reparent_event_handle        || !m_reparent_event_handle        || !m_exit_event_handle)   {     ....   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v501\/\">V501<\/a> There are identical sub-expressions &#8216;!m_reparent_event_handle&#8217; to the left and to the right of the &#8216;||&#8217; operator. main.cpp 191<\/p>\n<p>\u041f\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0421\u043b\u0435\u0432\u0430 \u0438 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &#8216;||&#8217; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <em>m_reparent_event_handle<\/em>. \u0410 \u0432\u043e\u0442 <em>m_thumbnail_event_handle<\/em> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043e\u0431\u0438\u0434\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 :).<\/p>\n<h4>\u041c\u0443\u0441\u043e\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/h4>\n<pre><code class=\"cpp\">LRESULT Toolbar::WindowProcessMessages(...., UINT msg, ....) {   switch (msg)   {     ....     case WM_DPICHANGED:     {       UINT dpi = LOWORD(dpi);       ....     }     ....   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v573\/\">V573<\/a> Uninitialized variable &#8216;dpi&#8217; was used. The variable was used to initialize itself. Toolbar.cpp 112<\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0431\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>dpi<\/em> \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c.<\/p>\n<h4>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 #pragma warning<\/h4>\n<pre><code class=\"cpp\">.... #pragma warning(disable : 5205) #include &lt;winrt\/base.h> #pragma warning(default : 5205) .... <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v665\/\">V665<\/a> Possibly, the usage of &#8216;#pragma warning(default: X)&#8217; is incorrect in this context. The &#8216;#pragma warning(push\/pop)&#8217; should be used instead. Check lines: 6, 8. pch.h 8<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 <em>#pragma warning<\/em>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <em>pragma warning(default : X)<\/em> \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c <em>X<\/em> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u042d\u0442\u043e \u043d\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<pre><code class=\"cpp\">.... #pragma warning(push) #pragma warning(disable : 5205) #include &lt;winrt\/base.h> #pragma warning(pop) .... <\/code><\/pre>\n<h4>\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">std::string toMediaTypeString(GUID subtype) {   if (subtype == MFVideoFormat_YUY2)      \/\/ &lt;=     return \"MFVideoFormat_YUY2\";   else if (subtype == MFVideoFormat_RGB32)     return \"MFVideoFormat_RGB32\";   else ....   else if (subtype == MFVideoFormat_AYUV)     return \"MFVideoFormat_AYUV\";   else if (subtype == MFVideoFormat_YUY2) \/\/ &lt;=     return \"MFVideoFormat_YUY2\";   else .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v517\/\">V517<\/a> The use of &#8216;if (A) {&#8230;} else if (A) {&#8230;}&#8217; pattern was detected. There is a probability of logical error presence. Check lines: 80, 102. Logging.cpp 80<\/p>\n<p>\u042f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 <em>if<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <em>subtype == MFVideoFormat_YUY2<\/em> \u0434\u0432\u0430 \u0440\u0430\u0437\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u041d\u043e \u0447\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043f\u0438\u0448\u0443\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e copy-paste \u0438 \u043c\u043e\u0433\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 61 \u0443\u0441\u043b\u043e\u0432\u0438\u044f!<\/p>\n<h4>\u0411\u0435\u0441\u0445\u043e\u0437\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/h4>\n<pre><code class=\"cpp\">winrt::com_ptr&lt;ID2D1Bitmap> ConvertID3D11Texture2DToD2D1Bitmap(....) {   capturedScreenTexture->view.pixels;   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v607\/\">V607<\/a> Ownerless expression &#8216;capturedScreenTexture->view.pixels&#8217;. MeasureToolOverlayUI.cpp 35<\/p>\n<p>\u041b\u0438\u0448\u043d\u0435\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434\u0435. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u044d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c, \u0438\u043b\u0438 \u0432 \u043b\u043e\u0433\u0438\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430. \u0427\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435, \u0438, \u0445\u043e\u0442\u044f \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0441\u043c\u044b\u0441\u043b\u0430 \u043e\u043d \u043d\u0435 \u0438\u043c\u0435\u0435\u0442.<\/p>\n<h4>Unsigned type value &lt; 0<\/h4>\n<pre><code class=\"cpp\">std::wstring NtdllExtensions::pid_to_user(DWORD pid) {   ....   DWORD token_size = 0;   GetTokenInformation(token, TokenUser, nullptr, 0, &amp;token_size);    if (token_size &lt; 0)   {     return user;   }   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v547\/\">V547<\/a> Expression &#8216;token_size &lt; 0&#8217; is always false. Unsigned type value is never &lt; 0. NtdllExtensions.cpp 314<\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>token_size<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 0. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0442\u0438\u043f\u0430 <em>DWORD<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u043c. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 <em>false<\/em>.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Microsoft PowerToys \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u043e\u0433\u0438\u0435 (\u0438 \u044f \u0432 \u0438\u0445 \u0447\u0438\u0441\u043b\u0435) \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442. \u0411\u044b\u043b\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430\u0448\u0451\u043b PVS-Studio. \u041c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e \u043e\u0434\u043d\u0438 \u0438 \u0436\u0435 \u0431\u0430\u0433\u0438 \u0438\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio \u2013 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e <a href=\"https:\/\/pvs-studio.ru\/ru\/pvs-studio\/try-free\/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=1078\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u041c\u043e\u0436\u0435\u0442, \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u043c\u0438? \ud83d\ude42<\/p>\n<p>\u042f \u0436\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PowerToys \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438 \u0436\u0434\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u044c <a href=\"https:\/\/github.com\/microsoft\/PowerToys\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 GitHub, \u043c\u043e\u0436\u0435\u0442, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043d\u0435\u0441\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0451 \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \ud83d\ude42 \u0423\u0434\u0430\u0447\u0438!<\/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: Artem Rovenskii. <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/cpp\/1078\/\">Microsoft PowerToys: the GitHub king among C# projects with C++ errors<\/a>.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/articles\/771454\/\"> https:\/\/habr.com\/ru\/articles\/771454\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>Microsoft PowerToys \u2013 \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041e\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Windows, \u043d\u043e \u0438 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u043e\u0432\u044b\u0435. \u0410 \u0435\u0449\u0435 \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0442\u043e\u043f\u0430 \u043f\u043e \u0437\u0432\u0435\u0437\u0434\u0430\u043c \u043d\u0430 GitHub \u0441\u0440\u0435\u0434\u0438 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0438\u0448\u0443\u0442 \u043a\u043e\u0434 \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0438 \u0443\u0437\u043d\u0430\u0435\u043c, \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c C++!<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u044d\u0442\u0438\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. Microsoft PowerToys \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Windows, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438. \u042f, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u0430\u043a\u0436\u0435 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0441\u0442\u0430\u043b\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 &#8216;What&#8217;s using this file?&#8217;. \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0443\u0431\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0444\u0430\u0439\u043b\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f Open Source \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 Microsoft. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 95 \u0442\u044b\u0441\u044f\u0447 \u0437\u0432\u0451\u0437\u0434 \u043d\u0430 GitHub. \u042d\u0442\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u043a\u043e\u0440\u043e\u043b\u044c \u0441\u0440\u0435\u0434\u0438 C# \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u0440\u0438 \u0447\u0451\u043c \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0421++? \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: C# \u2013 60%, \u0421++ \u2013 \u043f\u043e\u0447\u0442\u0438 40%.<\/p>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 PowerToys \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0442\u0430\u043a \u043b\u0438 \u044d\u0442\u043e. \u0412\u043e\u043e\u0440\u0443\u0436\u0438\u043c\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c PVS-Studio \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u043e\u0441\u0441-\u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0434\u0430. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0443 \u043d\u0430\u0441 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u043d\u0435 \u0447\u0430\u0441\u0442\u043e. \u0414\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043e\u0442\u0447\u0451\u0442\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043b\u0430\u0433\u0438\u043d PVS-Studio \u0434\u043b\u044f Visual Studio 2022. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0438\u043a \u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430: C# \u0438 C++. \u0422\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a. \u041d\u043e \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0440\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a \u2014 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c\u0443.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 PowerToys \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e <a href=\"https:\/\/github.com\/microsoft\/PowerToys\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 <a href=\"https:\/\/github.com\/microsoft\/PowerToys\/commit\/83f062542778a14d5dd260d0018d3db1f6c84af6\">\u043a\u043e\u043c\u043c\u0438\u0442<\/a>.<\/p>\n<h3>C# \u0447\u0430\u0441\u0442\u044c<\/h3>\n<h4>\u041f\u043e\u0437\u0434\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h4>\n<pre><code class=\"cpp\">public List&lt;Result> Query(Query query) {   bool isGlobalQuery = string.IsNullOrEmpty(query.ActionKeyword);   ....    if (query == null)   {     throw new ArgumentNullException(paramName: nameof(query));   }    \/\/ Happens if the user has only typed the action key so far   if (string.IsNullOrEmpty(query.Search))   {     return new List&lt;Result>();   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3095\/\">V3095<\/a> The &#8216;query&#8217; object was used before it was verified against null. Check lines: 56, 60. Main.cs 56<\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>query<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e <em>null<\/em>. \u0415\u0441\u043b\u0438 <em>query<\/em> \u0440\u0430\u0432\u0435\u043d <em>null<\/em>, \u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <em>ArgumentNullException<\/em>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <em>query<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 <em>ActionKeyword<\/em>. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u0443\u0434\u044c <em>query<\/em> \u0440\u0430\u0432\u0435\u043d <em>null<\/em>, \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442, \u0442.\u043a. \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d <em>NullReferenceException<\/em>.<\/p>\n<pre><code class=\"cpp\">private void SuggestionsList_SelectionChanged(....) {   ListView listview = (ListView)sender;   _viewModel.Results.SelectedItem = (ResultViewModel)listview.SelectedItem;   if (e.AddedItems.Count > 0 &amp;&amp; e.AddedItems[0] != null)   {     ....   }    if (_viewModel.Results != null &amp;&amp;       !string.IsNullOrEmpty(SearchBox.QueryTextBox.Text))   {     ....   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3095\/\">V3095<\/a> The &#8216;_viewModel.Results&#8217; object was used before it was verified against null. Check lines: 542, 563. MainWindow.xaml.cs 542<\/p>\n<p>\u0418 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u043e\u0437\u0434\u0430\u043b\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <em>_viewModel.Results<\/em> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0430 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <em>null<\/em>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043d\u0435\u0442, \u0434\u0435\u0440\u0436\u0438 NRE<\/h4>\n<pre><code class=\"cpp\">public LauncherViewModel(....) {   ....      if (updatingSettingsConfig == null)   {     updatingSettingsConfig = new UpdatingSettings();   }    updatingSettingsConfig = UpdatingSettings.LoadSettings();    if (updatingSettingsConfig.State == ....)   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3080\/\">V3080<\/a> Possible null dereference. Consider inspecting &#8216;updatingSettingsConfig&#8217;. LauncherViewModel.cs 138<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <em>updatingSettingsConfig.<\/em> \u041f\u043e \u043a\u043e\u0434\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <em>updatingSettingsConfig<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <em>null<\/em>, \u0438 \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0432\u043d\u043e <em>null<\/em>, \u0442\u043e \u0432 \u043d\u0435\u0451 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 <em>updatingSettingsConfig<\/em> \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 <em>LoadSettings<\/em>. \u0410 \u0437\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u0434?<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 <em>LoadSettings<\/em>:<\/p>\n<pre><code class=\"cpp\">public static UpdatingSettings LoadSettings() {   FileSystem fileSystem = new FileSystem();   var localAppDataDir = Environment.GetFolderPath(....);   var file = localAppDataDir + SettingsFilePath + SettingsFile;    if (fileSystem.File.Exists(file))   {     try     {       Stream inputStream = fileSystem.File.Open(file, FileMode.Open);       StreamReader reader = new StreamReader(inputStream);       string data = reader.ReadToEnd();       ....     }     catch (Exception)     {}   }    return null; } <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <em>null<\/em>, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u0430 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0432\u0435\u0440\u043d\u0451\u0442 <em>null<\/em>, \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u0441 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u041d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">private static int CalculateClosestSpaceIndex(List&lt;int> spaceIndices,                                               int firstMatchIndex) {   if (spaceIndices.Count == 0)   {     return -1;   }   else   {     int? ind = spaceIndices.OrderBy(item => (firstMatchIndex - item))                            .Where(item => firstMatchIndex > item)                            .FirstOrDefault();     int closestSpaceIndex = ind ?? -1;     return closestSpaceIndex;   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3022\/\">V3022<\/a> Expression &#8216;ind&#8217; is always not null. The operator &#8216;??&#8217; is excessive. StringMatcher.cs 230<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;??&#8217; \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a <em>ind<\/em> \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d <em>null<\/em>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0442\u0430\u043a \u043b\u0438 \u044d\u0442\u043e. <em>Ind<\/em> \u0438\u043c\u0435\u0435\u0442 nullable \u0442\u0438\u043f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c <em>null<\/em>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 <em>Ind<\/em>, \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <em>FirstOrDefault<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <em>null<\/em>. \u0414\u0435\u043b\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u043e, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0448\u0438\u0431\u0441\u044f? \u041d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0435 \u0442\u0430\u043a \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 :).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e <em>FirstOrDefault<\/em> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 <em>null<\/em>, \u0430 <em>default(TSource)<\/em>. <em>default(int?)<\/em> \u2013 \u044d\u0442\u043e <em>null<\/em>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <em>TSource<\/em> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <em>int<\/em>, \u0442\u0430\u043a \u043a\u0430\u043a <em>TSource<\/em> \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u043e \u0442\u0438\u043f\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 LINQ \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 <em>spaceIndices<\/em> \u0441 \u0442\u0438\u043f\u043e\u043c <em>List&lt;int><\/em>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 <em>ind<\/em> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d <em>default(int)<\/em>, \u0442.\u0435. 0. \u0410 \u0432\u043e\u0442 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043b\u043e\u0433\u0438\u043a\u0435. \u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0451\u0442 0, \u0430 \u043d\u0435 -1, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d.<\/p>\n<h4>\u0421\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0434\u0432\u0438\u0433\u0438<\/h4>\n<pre><code class=\"cpp\">public static List&lt;PluginPair> AllPlugins {   get   {     ....     try     {       \/\/ Return a comparable produce version.       var fileVersion = FileVersionInfo.GetVersionInfo(x.ExecuteFilePath);       return ((uint)fileVersion.ProductMajorPart &lt;&lt; 48)       | ((uint)fileVersion.ProductMinorPart &lt;&lt; 32)       | ((uint)fileVersion.ProductBuildPart &lt;&lt; 16)       | ((uint)fileVersion.ProductPrivatePart);       }     catch (System.IO.FileNotFoundException)     {       return 0U;     }     ....   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3134\/\">V3134<\/a> Shift by 48 bits is greater than the size of &#8216;UInt32&#8217; type of expression &#8216;(uint)fileVersion.ProductMajorPart&#8217;. PluginManager.cs 62<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3134\/\">V3134<\/a> Shift by 32 bits is greater than the size of &#8216;UInt32&#8217; type of expression &#8216;(uint)fileVersion.ProductMinorPart&#8217;. PluginManager.cs 63<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0438\u043f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u0430 \u0442\u0438\u043f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041a\u043e\u0434 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0440\u044b\u0432\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043b\u044f\u043c\u0431\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u0432\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f. \u0422\u0438\u043f <em>uint<\/em> \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32 \u0431\u0438\u0442\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 48 \u0431\u0438\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0441\u0434\u0432\u0438\u0433\u0443 \u043d\u0430 16. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 32 \u0431\u0438\u0442\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0441\u0434\u0432\u0438\u0433\u0443 \u043d\u0430 0 \u0431\u0438\u0442. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e <em>uint<\/em> \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>ulong<\/em>.<\/p>\n<h4>\u041a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;?.&#8217;<\/h4>\n<pre><code class=\"cpp\">public void Load(IMainView view) {   if (_batch.Files.Count == 0)   {     _batch.Files.AddRange(view?.OpenPictureFiles());   }   .... } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v3105\/\">V3105<\/a> The result of null-conditional operator is dereferenced inside the &#8216;AddRange&#8217; method. NullReferenceException is possible. Inspect the first argument &#8216;view?.OpenPictureFiles()&#8217;. MainViewModel.cs 47<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &#8216;?.&#8217; \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <em>AddRange<\/em>. \u042d\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f <em>ICollection&lt;T><\/em>. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">public static void AddRange&lt;T>(this ICollection&lt;T> collection,                                IEnumerable&lt;T> items) {   foreach (var item in items)   {     collection.Add(item);   } } <\/code><\/pre>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>items<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <em>null<\/em>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <em>foreach<\/em>. \u041a\u0430\u043a \u043c\u044b \u043f\u043e\u043c\u043d\u0438\u043c, <em>foreach<\/em> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043d\u0430\u0441 \u043e\u0442 <em>NullReferenceException<\/em>. \u041f\u043e\u043c\u043d\u0438\u043c \u0436\u0435? \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041c\u044b \u0434\u0430\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443: &#171;<a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/0832\/\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 ?. \u0432 foreach: \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 NullReferenceException, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>&#171;.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0421++ \u0447\u0430\u0441\u0442\u044c<\/h3>\n<h4>\u0423\u0442\u0435\u0447\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430<\/h4>\n<pre><code class=\"cpp\">void close_settings_window() {   if (g_settings_process_id != 0)   {     HANDLE proc = OpenProcess(PROCESS_TERMINATE, false, g_settings_process_id);     if (proc != INVALID_HANDLE_VALUE)     {       TerminateProcess(proc, 0);     }   } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v773\/\">V773<\/a> Visibility scope of the &#8216;proc&#8217; handle was exited without releasing the resource. A resource leak is possible. settings_window.cpp 635<\/p>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0443\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-openprocess\"><em>OpenProcess<\/em><\/a> \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0431\u0438\u0432\u0430\u044e\u0442. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/handleapi\/nf-handleapi-closehandle\"><em>CloseHandle<\/em><\/a> (\u043e \u0447\u0435\u043c Microsoft \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-openprocess#remarks\">\u0440\u0435\u043c\u0430\u0440\u043a\u0430\u0445<\/a> \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>OpenProcess<\/em>). \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0442\u0435\u0447\u043a\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0430.<\/p>\n<h4>\u0411\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h4>\n<pre><code class=\"cpp\">void FancyZonesSettings::LoadSettings() {   ....   if (auto val = values.get_int_value(....))   {     \/\/ Avoid undefined behavior     if (   *val >= 0         || *val &lt; static_cast&lt;int>(OverlappingZonesAlgorithm::EnumElements))     {       auto algorithm = (OverlappingZonesAlgorithm)*val;       if (m_settings.overlappingZonesAlgorithm != algorithm)       {         m_settings.overlappingZonesAlgorithm = algorithm;         NotifyObservers(SettingId::OverlappingZonesAlgorithm);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-359153","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359153","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=359153"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359153\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=359153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=359153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=359153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}