CMake: рд╡рд╣ рдорд╛рдорд▓рд╛ рдЬрдм рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдореНрдп рд╣реИ

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

CMake рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдпрд╣ рдкреНрд░рдгрд╛рд▓реА PVS-Studio рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдкреБрд░рд╛рдиреА рд╣реИ, рдЬрдмрдХрд┐ рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕реЗ рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХрдИ рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВред рд╕реАрдПрдордХреЗ рдХреЗ рджрд░реНрд╢рдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рд╣реИрдВред рдЙрд╕ рдкрд░, рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЗрдВ рдпрд╣ рдпрд╛ рд╡рд╣ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдкрд░рд┐рдЪрдп


рд╕реАрдПрдордХреЗ (рдЕрдВрдЧреНрд░реЗрдЬреА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдХ рд╕реЗ) рд╕реЛрд░реНрд╕ рдХреЛрдб рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдСрдЯреЛрдореЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рд╣реИред CMake рд╕реАрдзреЗ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ CMakeLists.txt рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ 2000 рдореЗрдВ рд╣реБрдИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗрд╡рд▓ 2008 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рддрдм 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ 64-рдмрд┐рдЯ рддрдХ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ 2010 рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдирд┐рджрд╛рди ( V501 - V545 ) рдХрд╛ рдкрд╣рд▓рд╛ рд╕реЗрдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╡реИрд╕реЗ, рд╕реАрдПрдордХреЗ рдХреЛрдб рдкрд░ рдЗрд╕ рдкрд╣рд▓реЗ рд╕реЗрдЯ рд╕реЗ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдиреА рд╣реИред

рдЕрдиреБрдЪрд┐рдд рдЧрд▓рддрд┐рдпрд╛рдБ


V1040 рдкреВрд░реНрд╡-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореИрдХреНрд░реЛ рдирд╛рдо рдХреА рд╡рд░реНрддрдиреА рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЯрд╛рдЗрдкреЛред '__MINGW32_' рдореИрдХреНрд░реЛ '__MINGW32__' рдХреЗ рд╕рдорд╛рди рд╣реИред рд╡рд┐рдирд╛рдкреА.рд╣ 4112

/* from winternl.h */ #if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

V1040 рдирд┐рджрд╛рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдордп, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рд▓реАрдЬ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕ рдирд┐рджрд╛рди рдХреА рдорджрдж рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХрдард┐рди рдЧрд▓рддреА рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВред

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

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


V531 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ () рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()ред cmGlobalVisualStudioGenerator.cxx 558

 bool IsVisualStudioMacrosFileRegistered(const std::string& macrosFile, const std::string& regKeyBase, std::string& nextAvailableSubKeyName) { .... if (ERROR_SUCCESS == result) { wchar_t subkeyname[256]; // <= DWORD cch_subkeyname = sizeof(subkeyname) * sizeof(subkeyname[0]); // <= wchar_t keyclass[256]; DWORD cch_keyclass = sizeof(keyclass) * sizeof(keyclass[0]); FILETIME lastWriteTime; lastWriteTime.dwHighDateTime = 0; lastWriteTime.dwLowDateTime = 0; while (ERROR_SUCCESS == RegEnumKeyExW(hkey, index, subkeyname, &cch_subkeyname, 0, keyclass, &cch_keyclass, &lastWriteTime)) { .... } .... } 

рдЬрдм рд╕рд░рдгреА рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдХрд╛рд░ рдХрд╛ рдСрдкрд░реЗрдЯрд░ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рджреЛрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ред рдЪрд░ cch_subkeyname рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдФрд░ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╕реЗ 4 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдЖрдЗрдП рд╣рдо рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ "4 рдмрд╛рд░" рдХрд╣рд╛рдВ рд╣реИред

рд╕рд░рдгреА рдФрд░ рдЙрд╕рдХреЗ рдЧрд▓рдд рдЖрдХрд╛рд░ рдХреЛ RegEnumKeyExW рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 LSTATUS RegEnumKeyExW( HKEY hKey, DWORD dwIndex, LPWSTR lpName, // <= subkeyname LPDWORD lpcchName, // <= cch_subkeyname LPDWORD lpReserved, LPWSTR lpClass, LPDWORD lpcchClass, PFILETIME lpftLastWriteTime ); 

рдкреЙрдЗрдВрдЯрд░ lpcchName рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрдлрд╝рд░ рдХреЗ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдПрдХ рдЪрд░ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ: "рдПрдХ рдЪрд░ рдХрд╛ рд╕реВрдЪрдХ рдЬреЛ рд╡рд░реНрдгреЛрдВ рдореЗрдВ lpClass рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрдлрд╝рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ"ред рдЙрдкрдХреБрдВрдЬреА рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ 512 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ рдФрд░ рдпрд╣ wchar_t рдкреНрд░рдХрд╛рд░ рдХреЗ 256 рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ (Windows wchar_t рдореЗрдВ рдпрд╣ 2 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ)ред рдпрд╣ рдорд╛рди 256 рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, 1024 рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 512 рдХреЛ 2 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЕрдм рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЧреБрдгрд╛ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 DWORD cch_subkeyname = sizeof(subkeyname) / sizeof(subkeyname[0]); 

рд╡реИрд╕реЗ, cch_keyclass рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдареАрдХ рд╡реИрд╕реА рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

рд╡рд░реНрдгрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕реА рд╕рднреА рдЬрдЧрд╣реЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

  • V531 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ () рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()ред cmGlobalVisualStudioGenerator.cxx 556
  • V531 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ () рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()ред cmGlobalVisualStudioGenerator.cxx 572
  • V531 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ () рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()ред cmGlobalVisualStudioGenerator.cxx 621
  • V531 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ () рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()ред cmGlobalVisualStudioGenerator.cxx 622
  • V531 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░ () рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдХрд╛рд░ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()ред cmGlobalVisualStudioGenerator.cxx 649

V595 nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'this-> BuildFileStream' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 133, 134. cmMakefileTargetGenerator.cxx 133

 void cmMakefileTargetGenerator::CreateRuleFile() { .... this->BuildFileStream->SetCopyIfDifferent(true); if (!this->BuildFileStream) { return; } .... } 

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

  • V595 nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдЗрд╕-> рдлреНрд▓реИрдЧрдлрд╛рдЗрд▓рд╕реНрдЯреНрд░реАрдо' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрди: 303, 304. cmMakefileTargetGenerator.cxx 303

V614 Uninitialized рдкреЙрдЗрдВрдЯрд░ 'str' рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред cmVSSetupHelper.h 80

 class SmartBSTR { public: SmartBSTR() { str = NULL; } SmartBSTR(const SmartBSTR& src) { if (src.str != NULL) { str = ::SysAllocStringByteLen((char*)str, ::SysStringByteLen(str)); } else { str = ::SysAllocStringByteLen(NULL, 0); } } .... private: BSTR str; }; 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЕрд╕рдВрдЧрдард┐рдд рд╕реВрдЪрдХ str рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдФрд░ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рдЗрдкреЛ рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реБрдЖред SysAllocStringByteLen рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ src.str рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред

V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рд▓реИрдВрд╕рд┐рдордмреЛрд▓' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 28 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ

 static int64_t expand(struct archive_read *a, int64_t end) { .... if ((lensymbol = read_next_symbol(a, &rar->lengthcode)) < 0) goto bad_data; if (lensymbol > (int)(sizeof(lengthbases)/sizeof(lengthbases[0]))) goto bad_data; if (lensymbol > (int)(sizeof(lengthbits)/sizeof(lengthbits[0]))) goto bad_data; len = lengthbases[lensymbol] + 2; if (lengthbits[lensymbol] > 0) { if (!rar_br_read_ahead(a, br, lengthbits[lensymbol])) goto truncated_data; len += rar_br_bits(br, lengthbits[lensymbol]); rar_br_consume(br, lengthbits[lensymbol]); } .... } 

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

рдЕрдорд╛рдиреНрдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рд░рдгрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА:

  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рд▓реИрдВрд╕рд┐рдордмреЛрд▓' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 28 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ
  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рд▓реИрдВрд╕рд┐рдордмреЛрд▓' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 28 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ
  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рд▓реИрдВрд╕рд┐рдордмреЛрд▓' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 28 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ
  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рд▓реИрдВрд╕рд┐рдордмреЛрд▓' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 28 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ
  • V557 рдРрд░реЗ рдУрд╡рд░рд░рди рд╕рдВрднрд╡ рд╣реИред 'рдСрдлрд╕рд╛рдЗрдВрдмреЛрд▓' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди 60 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ

рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡


V773 рдлрд╝рдВрдХреНрд╢рди рдХреЛ 'testRun' рдкреЙрдЗрдВрдЯрд░ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред cmCTestMultiProcessHandler.cxx 193

 void cmCTestMultiProcessHandler::FinishTestProcess(cmCTestRunTest* runner, bool started) { .... delete runner; if (started) { this->StartNextTests(); } } bool cmCTestMultiProcessHandler::StartTestProcess(int test) { .... cmCTestRunTest* testRun = new cmCTestRunTest(*this); // <= .... if (testRun->StartTest(this->Completed, this->Total)) { return true; // <= } this->FinishTestProcess(testRun, false); // <= return false; } 

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рд╕реВрдЪрдХ testRun рджреНрд╡рд╛рд░рд╛ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди testRun-> StartTest рд░рд┐рдЯрд░реНрди рд╕рд╣реА рд╣реИ ред рдЬрдм рдХреЛрдб рдХреА рдХрд┐рд╕реА рдЕрдиреНрдп рд╢рд╛рдЦрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ testRun рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХреЛ рдЗрд╕-> FinishTestProcess рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡


V773 'fd' рд╣реИрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред rhash.c 450

 RHASH_API int rhash_file(....) { FILE* fd; rhash ctx; int res; hash_id &= RHASH_ALL_HASHES; if (hash_id == 0) { errno = EINVAL; return -1; } if ((fd = fopen(filepath, "rb")) == NULL) return -1; if ((ctx = rhash_init(hash_id)) == NULL) return -1; // <= fclose(fd); ??? res = rhash_file_update(ctx, fd); fclose(fd); rhash_final(ctx, result); rhash_free(ctx); return res; } 

рд╢рд░реНрддреЛрдВ рдореЗрдВ рдЕрдЬреАрдм рддрд░реНрдХ


V590 '* s! =' '0' && * s == '' 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рдЧрд▓рдд рдЪрд┐рддреНрд░рдг рд╣реИред рд╕рдВрдЧреНрд░рд╣_ cmdline.c 76

 static ssize_t get_argument(struct archive_string *as, const char *p) { const char *s = p; archive_string_empty(as); /* Skip beginning space characters. */ while (*s != '\0' && *s == ' ') s++; .... } 

рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде * s рдЪрд░рд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реВрдк рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдПрдХ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред

V592 рджреЛ рдмрд╛рд░ рдХреЛрд╖реНрдардХ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: ((рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐))ред рдХреЛрд╖реНрдардХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдореМрдЬреВрдж рд╣реИред cmCTestTestHandler.cxx 899

 void cmCTestTestHandler::ComputeTestListForRerunFailed() { this->ExpandTestsToRunInformationForRerunFailed(); ListOfTests finalList; int cnt = 0; for (cmCTestTestProperties& tp : this->TestList) { cnt++; // if this test is not in our list of tests to run, then skip it. if ((!this->TestsToRun.empty() && std::find(this->TestsToRun.begin(), this->TestsToRun.end(), cnt) == this->TestsToRun.end())) { continue; } tp.Index = cnt; finalList.push_back(tp); } .... } 

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

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

 if (this->TestsToRun.empty() || std::find(this->TestsToRun.begin(), this->TestsToRun.end(), cnt) == this->TestsToRun.end()) { continue; } 

V592 рджреЛ рдмрд╛рд░ рдХреЛрд╖реНрдардХ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: ((рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐))ред рдХреЛрд╖реНрдардХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдореМрдЬреВрдж рд╣реИред cmMessageCommand.cxx 73

 bool cmMessageCommand::InitialPass(std::vector<std::string> const& args, cmExecutionStatus&) { .... } else if (*i == "DEPRECATION") { if (this->Makefile->IsOn("CMAKE_ERROR_DEPRECATED")) { fatal = true; type = MessageType::DEPRECATION_ERROR; level = cmake::LogLevel::LOG_ERROR; } else if ((!this->Makefile->IsSet("CMAKE_WARN_DEPRECATED") || this->Makefile->IsOn("CMAKE_WARN_DEPRECATED"))) { type = MessageType::DEPRECATION_WARNING; level = cmake::LogLevel::LOG_WARNING; } else { return true; } ++i; } .... } 

рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВред IsSet рдлрд╝рдВрдХреНрд╢рди ("CMAKE_WARN_DEPRECATED") рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ CMAKE_WARN_DEPRECATED рдорд╛рди рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реИ, рдФрд░ IsOn рдлрд╝рдВрдХреНрд╢рди ("CMAKE_WARN_DEPRECATED") рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдирдХрд╛рд░ рдСрдкрд░реЗрдЯрд░ рдмрд╣реБрдд рд╣реА рдХрдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реНрддрд░ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред

V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдмреВрд▓ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! = рдмреВрд▓ (рдмреА)' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред cmCTestRunTest.cxx 151

 bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) { .... } else if ((success && !this->TestProperties->WillFail) || (!success && this->TestProperties->WillFail)) { this->TestResult.Status = cmCTestTestHandler::COMPLETED; outputStream << " Passed "; } .... } 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдХрд░ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 } else if (success != this->TestProperties->WillFail) { this->TestResult.Status = cmCTestTestHandler::COMPLETED; outputStream << " Passed "; } 

рдХреБрдЫ рдФрд░ рдЬрдЧрд╣реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A && B) || ((A &&! B) 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐' рдмреВрд▓ (рдП) == рдмреВрд▓ (рдмреА) 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред cmCTestTestHandler.cxx 702
  • V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдмреВрд▓ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! = рдмреВрд▓ (рдмреА)' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред digest_sspi.c 443
  • V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдмреВрд▓ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! = рдмреВрд▓ (рдмреА)' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред tcp.c 1295
  • V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдмреВрд▓ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! = рдмреВрд▓ (рдмреА)' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред testDynamicLoader.cxx 58
  • V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдмреВрд▓ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! = рдмреВрд▓ (рдмреА)' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред testDynamicLoader.cxx 65
  • V728 рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдж '(A &&! B) || (рдП! рдФрд░ рдмреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдмреВрд▓ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ! = рдмреВрд▓ (рдмреА)' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред testDynamicLoader.cxx 72

рд╡рд┐рд╡рд┐рдз рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ


V523 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди рдмрд╛рдж рдХреЗ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЖрд░реНрдХрд╛рдЗрд╡_рдбреНрд░реЗрдб_рдмрд┐рд▓реНрдбрд░рдлреЙрд░реНрдо_рдЖрд░рд╕реА 415

 static int _ar_read_header(struct archive_read *a, struct archive_entry *entry, struct ar *ar, const char *h, size_t *unconsumed) { .... /* * "__.SYMDEF" is a BSD archive symbol table. */ if (strcmp(filename, "__.SYMDEF") == 0) { archive_entry_copy_pathname(entry, filename); /* Parse the time, owner, mode, size fields. */ return (ar_parse_common_header(ar, entry, h)); } /* * Otherwise, this is a standard entry. The filename * has already been trimmed as much as possible, based * on our current knowledge of the format. */ archive_entry_copy_pathname(entry, filename); return (ar_parse_common_header(ar, entry, h)); } 

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

V535 рдЪрд░ 'i' рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдФрд░ рдмрд╛рд╣рд░реА рд▓реВрдк рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрди: 2220, 2241ред рдорд▓реНрдЯреАрд╕реА 2241

 static CURLMcode singlesocket(struct Curl_multi *multi, struct Curl_easy *data) { .... for(i = 0; (i< MAX_SOCKSPEREASYHANDLE) && // <= (curraction & (GETSOCK_READSOCK(i) | GETSOCK_WRITESOCK(i))); i++) { unsigned int action = CURL_POLL_NONE; unsigned int prevaction = 0; unsigned int comboaction; bool sincebefore = FALSE; s = socks[i]; /* get it from the hash */ entry = sh_getentry(&multi->sockhash, s); if(curraction & GETSOCK_READSOCK(i)) action |= CURL_POLL_IN; if(curraction & GETSOCK_WRITESOCK(i)) action |= CURL_POLL_OUT; actions[i] = action; if(entry) { /* check if new for this transfer */ for(i = 0; i< data->numsocks; i++) { // <= if(s == data->sockets[i]) { prevaction = data->actions[i]; sincebefore = TRUE; break; } } } .... } 

рдЪрд░ i рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рд╣рд░реА рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдЫреЛрд░реЛрдВ рдореЗрдВ рд▓реВрдк рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрд╛рдЙрдВрдЯрд░ рдорд╛рди рдлрд┐рд░ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдПрдХ рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдЧрд┐рдирдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдБ рдПрдХ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рд╕рдВрджрд┐рдЧреНрдз рд╣реИред

V519 'рдЯреИрдЧрд╕реНрдЯреНрд░рд┐рдВрдЧ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 84, 86. cmCPackLog.cxx 86

 oid cmCPackLog::Log(int tag, const char* file, int line, const char* msg, size_t length) { .... if (tag & LOG_OUTPUT) { output = true; display = true; if (needTagString) { if (!tagString.empty()) { tagString += ","; } tagString = "VERBOSE"; } } if (tag & LOG_WARNING) { warning = true; display = true; if (needTagString) { if (!tagString.empty()) { tagString += ","; } tagString = "WARNING"; } } .... } 

рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдирдП рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдЯреИрдЧрд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ ред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЧрд▓рддреА рдХреНрдпрд╛ рдереА, рдпрд╛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдСрдкрд░реЗрдЯрд░ '=' рдФрд░ '+ =' рднреНрд░рдорд┐рдд рдереЗред

рдРрд╕реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА:

  • V519 'рдЯреИрдЧрд╕реНрдЯреНрд░рд┐рдВрдЧ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 94, 96. cmCPackLog.cxx 96
  • V519 'рдЯреИрдЧрд╕реНрдЯреНрд░рд┐рдВрдЧ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 104, 106. cmCPackLog.cxx 106
  • V519 'рдЯреИрдЧрд╕реНрдЯреНрд░рд┐рдВрдЧ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 114, 116. cmCPackLog.cxx 116
  • V519 'рдЯреИрдЧрд╕реНрдЯреНрд░рд┐рдВрдЧ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 125, 127. cmCPackLog.cxx 127

V519 'aes-> aes_set' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 4052, 4054ред рдЖрд░реНрдХрд╛рдЗрд╡_рд╕реНрдЯреНрд░рд┐рдВрдЧред 4054

 int archive_mstring_copy_utf8(struct archive_mstring *aes, const char *utf8) { if (utf8 == NULL) { aes->aes_set = 0; // <= } aes->aes_set = AES_SET_UTF8; // <= .... return (int)strlen(utf8); } 

рдордЬрдмреВрд░рди AES_SET_UTF8 рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдХрд┐рд╕реА рднреА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЧреБрдорд░рд╛рд╣ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕ рдЬрдЧрд╣ рдХреЗ рд╢реЛрдзрди рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ рдФрд░ рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • V519 'aes-> aes_set' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 4066, 4068ред рдЖрд░реНрдХрд╛рдЗрд╡_рд╕реНрдЯреНрд░рд┐рдВрдЧред 4068

CMake рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЦреЛрдЬреЗрдВ


рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдПрдордХреЗ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВред

рд╡рд┐рдВрдбреЛрдЬ / рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓ рдХреЛ CMake GUI рдпрд╛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 cmake -G "Visual Studio 15 2017 Win64" .. 

рдЕрдЧрд▓рд╛, рдЖрдк .sln рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рд┐рдирдХреНрд╕ / macOS

рдЗрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП compile_commands.json рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред CMake рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On .. 

рдпрд╣ .json рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:

 pvs-studio-analyzer analyze -l /path/to/PVS-Studio.lic -o /path/to/project.log -e /path/to/exclude-path -j<N> 

рд╣рдордиреЗ CMake рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред CMake рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг GitHub рдкрд░ рд╣рдорд╛рд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: pvs-studio-cmake-рдЙрджрд╛рд╣рд░рдг ред

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


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

рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд╕рдВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ C рдФрд░ C ++ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ C # рдФрд░ Java рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдХрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: Svyatoslav Razmyslovред CMake: рдорд╛рдорд▓рд╛ рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдХреНрд╖рдореНрдп рд╣реИ ред

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


All Articles