ã³ã³ããåæè¡ã¯ããœãããŠã§ã¢ã®çµã¿ç«ãŠãšãã¹ãã«ç©æ¥µçã«äœ¿çšãããŠããŸãã PVS-Studio for Linuxã®ç»å Žã«ããããŠãŒã¶ãŒã¯Dockerãå«ããã®ãã©ãããã©ãŒã ã§ãããžã§ã¯ãããã¹ãããä»ã®æ¹æ³ã«éçåæãè¿œå ã§ããããã«ãªããŸããã ãã®èšäºã§ã¯ãDockerã§PVS-Studioã¢ãã©ã€ã¶ãŒãæäœããæ©èœã«ã€ããŠèª¬æããŸããããã«ãããåæã®å質ãšäœ¿ãããããåäžããŸãã ãŸããAzure Service Fabricãããžã§ã¯ãã§èŠã€ãã£ããšã©ãŒããªã¹ãããŸãã
ã¯ããã«
Dockerã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãç¹å¥ã«äœæãããã€ã¡ãŒãžã«åºã¥ããŠéé¢ãããç°å¢ã§ããã»ã¹ãéå§ã§ããããã«ããããã°ã©ã ã§ãã ã³ã³ããåæè¡ã¯ããœãããŠã§ã¢ã®éçºããã¹ããªã©ãå€ãã®ã¿ã¹ã¯ã§éåžžã«äžè¬çã«ãªã£ãŠããŸãã éåžžãéç解æã¯ãããžã§ã¯ãã¢ã»ã³ããªãšåãç°å¢ã§å®è¡ããããããDockerã§ã®äœ¿çšã¯æ¢åã®ã³ã³ããã«éåžžã«ç°¡åã«å®è£
ã§ããŸãã
LinuxããŒãžã§ã³ã®
PVS-Studioéçã¢ãã©ã€ã¶ãŒã®çµ±åãšèµ·åã®äŸã瀺ããŸãã ãã ãã説æãããŠããã¢ãã©ã€ã¶ãŒã®ãã¥ãŒãã³ã°ãªãã·ã§ã³ã¯å¯èœã§ãããã©ã®ãã©ãããã©ãŒã ã§ãæšå¥šãããŸãã æè¿å
¬éããã
macOSããŒãžã§ã³ã®ã¢ãã©ã€ã¶ãŒã¯ãPVS-Studio for Linuxã䜿çšããå Žåãšã»ãŒåãã§ãã
Azure Service Fabricã¯ãDockerã§ã®ã¢ãã©ã€ã¶ãŒã®çµ±åãšèµ·åã®ãããžã§ã¯ããšããŠéžæãããŸããã
Service Fabricã¯ãã¹ã±ãŒã©ãã«ã§ä¿¡é Œæ§ã®é«ãåæ£ã¢ããªã±ãŒã·ã§ã³ãå±éããã³ç®¡çããããã®åæ£ã·ã¹ãã ãã©ãããã©ãŒã ã§ãã Service Fabricã¯ãWindowsããã³Linuxãä»»æã®ã¯ã©ãŠããä»»æã®ããŒã¿ã»ã³ã¿ãŒãä»»æã®å°åãããã«ã©ãããããäžã§å®è¡ãããŸãã
ã¢ãã©ã€ã¶ãŒã®æ®µéçãªå®è£
ãŸããã¢ãã©ã€ã¶ãŒã®çµ±åæ¹æ³ãéžæããããã«ãããžã§ã¯ããã©ã®ããã«çµã¿ç«ãŠãããããèŠãŠã¿ãŸãããã ã¹ã¯ãªãããšã³ãã³ããåŒã³åºãé åºã¯æ¬¡ã®ãšããã§ãã
以äžã¯ããããžã§ã¯ããã¡ã€ã«ãçæããã
build.shã¹ã¯ãªããã®ã¹ããããã§ãã
cmake ${CMakeGenerator} \ -DCMAKE_C_COMPILER=${CC} \ -DCMAKE_CXX_COMPILER=${CXX} \ -DCMAKE_BUILD_TYPE=${BuildType} \ -DBUILD_THIRD_PARTY=${BuildThirdPartyLib} \ ${DisablePrecompileFlag} ${ScriptPath}/$DirName
ãããžã§ã¯ããåæããããã«ã
ã¯ã€ãã¯ã¹ã¿ãŒã/ CMakeãããžã§ã¯ãã»ã¯ã·ã§ã³ã§èª¬æãããŠããããã¥ã¡ã³ãã®ã¡ãœããã䜿çšããããšã«ããŸããã
diff --git a/src/build.sh b/src/build.sh index 290c57d..5901fd6 100755 --- a/src/build.sh +++ b/src/build.sh @@ -179,6 +179,7 @@ BuildDir() -DCMAKE_CXX_COMPILER=${CXX} \ -DCMAKE_BUILD_TYPE=${BuildType} \ -DBUILD_THIRD_PARTY=${BuildThirdPartyLib} \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=On \ ${DisablePrecompileFlag} ${ScriptPath}/$DirName if [ $? != 0 ]; then let TotalErrors+=1
ã¢ãã©ã€ã¶ãŒã€ã³ã¹ããŒã«ã®è¿œå ïŒ
diff --git a/src/build.sh b/src/build.sh index 290c57d..581cbaf 100755 --- a/src/build.sh +++ b/src/build.sh @@ -156,6 +156,10 @@ BuildDir() CXX=${ProjRoot}/deps/third-party/bin/clang/bin/clang++ fi + dpkg -i /src/pvs-studio-6.23.25754.2246-amd64.deb + apt -f install -y + pvs-studio --version +
srcãã£ã¬ã¯ããªã¯ãããžã§ã¯ãã®äžéšã§ããã
/ srcã«ããŠã³ããããŸãã
PVS-Studio.cfgã¢ãã©ã€ã¶ãŒã®æ§æãã¡ã€ã«ã«ãããŒã¯ãä»ããŸããã 次ã«ãã¢ãã©ã€ã¶ãŒã次ã®ããã«åŒã³åºãããšãã§ããŸãã
diff --git a/src/build.sh b/src/build.sh index 290c57d..2a286dc 100755 --- a/src/build.sh +++ b/src/build.sh @@ -193,6 +193,9 @@ BuildDir() cd ${ProjBinRoot}/build.${DirName} + pvs-studio-analyzer analyze --cfg /src/PVS-Studio.cfg \ + -o ./service-fabric-pvs.log -j4 + if [ "false" = ${SkipBuild} ]; then if (( $NumProc <= 0 )); then NumProc=$(($(getconf _NPROCESSORS_ONLN)+0))
ãããžã§ã¯ãããã«ãããåã«ã¢ãã©ã€ã¶ãŒãéå§ããŸããã ããã¯æ£ãã決å®ã§ã¯ãããŸããããã¹ã¯ãªããã«ã¯ãããžã§ã¯ãã¢ã»ã³ããªãéå§ããããã®å€ãã®æ¡ä»¶ããããããã¿ã¹ã¯ãå°ãç°¡ç¥åããäºåã«ãããžã§ã¯ããã³ã³ãã€ã«ããŸããã ãããžã§ã¯ãã®æ§é ãããç解ããŠããéçºè
ã¯ããããžã§ã¯ãã®æ§ç¯
åŸã«ã¢ãã©ã€ã¶ãŒãçµ±åããå¿
èŠããããŸãã
ããã§ã次ã®ã³ãã³ãã䜿çšããŠãããžã§ã¯ããçµã¿ç«ãŠãŠåæã§ããŸãã
sudo ./runbuild.sh -release -j4
æåã®åæçµæã¯ãå€æ°ã®ãã¯ããååšããªããã¡ã€ã«ããœãŒã¹ã³ãŒããã¡ã€ã«ãžã®èª€ã£ããã¹ãªã©ã«é¢ããèŠåã§å€±æããŸãã 次ã®ã»ã¯ã·ã§ã³ã§ã¯ãåæã倧å¹
ã«æ¹åããããã€ãã®èšå®ãè¿œå ãã
PVS-Studio.cfgãã¡ã€ã«ã®å
容ã«ã€ããŠ
説æããŸã ã
è¿œå ã®ã¢ãã©ã€ã¶ãŒã®ã»ããã¢ãã
ãœãŒã¹ãã£ã¬ã¯ããªãžã®çžå¯Ÿãã¹å¥ã®ã³ã³ãã¥ãŒã¿ãŒã§1ã€ã®ã¬ããŒãã衚瀺ããããã«ãã¢ãã©ã€ã¶ãŒã¯ãã¡ã€ã«ãžã®çžå¯Ÿãã¹ãå«ãã¬ããŒããçæã§ããŸãã ã³ã³ããŒã¿ãŒã䜿çšããŠå¥ã®ã³ã³ãã¥ãŒã¿ãŒã§åŸ©å
ã§ããŸãã
æ£ãããã¡ã€ã«ãã¹ã䜿çšããŠã³ã³ããããã¬ããŒããæœåºããã«ã¯ãã¢ãã©ã€ã¶ãŒã®åæ§ã®æ§æãå®è¡ããå¿
èŠããããŸãã ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã¯ã«ãŒãã«ããŠã³ãããããããã¢ãã©ã€ã¶ãŒã®ãã©ã¡ãŒã¿ãŒã¯æ¬¡ã®ããã«ãªããŸãã
sourcetree-root=/
ååšããªããã¡ã€ã«ã®èŠåãªããžããªã«ãªã
/å€éšãã£ã¬ã¯ããªã¯ãã³ã³ããã§å±éãããŸãã ã»ãšãã©ã®å Žåãããã€ãã®ãããžã§ã¯ãã®äŸåé¢ä¿ãã³ã³ãã€ã«ãããŠãããåæããåçŽã«é€å€ã§ããŸãã
exclude-path=/external
ã³ã³ãã€ã©ãã¡ã€ã«ããã¹ããããã³ã©ã€ãã©ãªã®èŠåDockerã§ã¯ãã³ã³ãã€ã©ãéæšæºã®å Žæã«é
眮ãããã®ã©ã€ãã©ãªãã¬ããŒãã«å«ããããšãã§ããŸãã ããããé€å€ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã
/ depsãã£ã¬ã¯ããªãšãã¹ãã®ãããã£ã¬ã¯ããªãã¹ãã£ã³ããé€å€ããŸãã
exclude-path=/deps exclude-path=/src/prod/test
倱æãããã¯ãããçããæ°åã®èª€æ€ç¥ãšã®æŠãã¢ãã©ã€ã¶ãŒã¯ãã³ã¡ã³ãã䜿çšããããŸããŸãªèšºæã®æ§æããµããŒãããŠããŸãã ãããã«ã€ããŠã¯ã
ãããš
ããã§èªãããšãã§ã
ãŸã ã
èšå®ã¯ãããžã§ã¯ãã³ãŒãã«é
眮ããããå¥ã®ãã¡ã€ã«ã«é
眮ã§ããŸãã
rules-config=/src/service-fabric.pvsconfig
service-fabric.pvsconfigãã¡ã€ã«ã®å
容ïŒ
#V501
ã«ã¹ã¿ã ããŒã¯ã¢ããã®æ°è¡ã¯ãã¬ããŒããããã¯ãããæ°åã®èŠåãåé€ããŸãã
ãã®ä»ã®èšå®ã©ã€ã»ã³ã¹ãã¡ã€ã«ãžã®ãã¹ãšæ±çšèšºæã®ã¿ãå«ããïŒåæãé«éåããïŒïŒ
lic-file=/src/PVS-Studio.lic analysis-mode=4
PVS-Studio.cfgãã¡ã€ã«å
šäœ lic-file=/src/PVS-Studio.lic rules-config=/src/service-fabric.pvsconfig exclude-path=/deps exclude-path=/external exclude-path=/src/prod/test analysis-mode=4 sourcetree-root=/
ä»ã®ãããžã§ã¯ãã§å¿
èŠã«ãªãå ŽåããããŸã
ãããžã§ã¯ããæ€èšŒããå¥ã®æ¹æ³ã«ã¯ã
straceã·ã¹ãã ãŠãŒãã£ãªãã£ãå¿
èŠã§ãã ã»ãšãã©ã®å Žåãã³ã³ããã«ã¯ååšããªãããããã®ãŠãŒãã£ãªãã£ã®ã€ã³ã¹ããŒã«æé ããªããžããªããã¹ã¯ãªããã«è¿œå ããå¿
èŠããããŸãã
ã¯ãã¹ã³ã³ãã€ã©ãªã©ã®éæšæºåã®ã³ã³ãã€ã©ã¯ãã³ã³ããã«é
眮ã§ããŸãã ã³ã³ãã€ã©ã®ãã£ã¬ã¯ããªãåæããé€å€ããå¿
èŠãããããšã¯æ¢ã«æžããŸãããããã®å Žåãæ°ããã³ã³ãã€ã©ã®ååãã¢ãã©ã€ã¶ã«æž¡ãå¿
èŠããããŸãã
pvs-studio-analyzer analyze ... --compiler COMPILER_NAME...
ãã©ã°ãè€è£œããŠãè€æ°ã®ã³ã³ãã€ã©ãæå®ã§ããŸãã
LinuxãŸãã¯Windowsã§ã¬ããŒãã衚瀺ãã
Linuxã§ã¢ãã©ã€ã¶ãŒã¬ããŒãã衚瀺ããã«ã¯ãã¬ããŒãçæã³ãã³ããå¿
èŠãªåœ¢åŒã§ã¹ã¯ãªããã«è¿œå ã§ããŸãã
ããšãã°ãQtCreatorã§è¡šç€ºããã«ã¯ïŒ
plog-converter -t tasklist -r "~/Projects/service-fabric" \ ./service-fabric-pvs.log -o ./service-fabric-pvs.tasks
ãŸãã¯ãã©ãŠã¶ã§ïŒ
plog-converter -t fullhtml -r "~/Projects/service-fabric" \ ./service-fabric-pvs.log -o ./
Windowsã§ã¬ããŒãã衚瀺ããã«ã¯ãWindowsçšã®é
åžãããã«å«ãŸããŠãã
ã¹ã¿ã³ãã¢ãã³ãŠãŒãã£ãªãã£ã§
.logãã¡ã€ã«ãéãã ãã§ãã
Azure Service Fabricã®ãµã³ãã«ãšã©ãŒ
å€å
žçãªã¿ã€ããã¹
V501 CWE-571ã==ãæŒç®åã®å·Šå³ã«åãå¯æ¬¡åŒããããŸããiter-> PackageName == iter-> PackageName DigestedApplicationDescription.cpp 247
ErrorCode DigestedApplicationDescription::ComputeAffectedServiceTypes(....) { .... if (iter->PackageName == iter->PackageName && originalRG != this->ResourceGovernanceDescriptions.end() && targetRG != targetDescription.ResourceGovernanceDes....end()) { .... } .... }
å€æ°
iter-> PackageName㯠ã
iter2-> PackageNameãŸãã¯
codePackagesãšæ¯èŒããå¿
èŠããããŸãã
V501 CWE-571ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«åäžã®ãµãåŒãïŒdataSizeInRecordIoBuffer> 0ïŒãããããŸãã OverlayStream.cpp 4966
VOID OverlayStream::AsyncMultiRecordReadContextOverlay::FSMContinue( __in NTSTATUS Status ) { ULONG dataSizeInRecordMetadata = 0; ULONG dataSizeInRecordIoBuffer = 0; .... if ((dataSizeInRecordIoBuffer > 0) && (dataSizeInRecordIoBuffer > 0)) { .... } .... }
Copy-Pasteã«ããã
dataSizeInRecordMetadataãããã¡ãµã€ãºã¯ãã§ãã¯ãããŸããã
V534 CWE-691ãforãæŒç®åå
ã§ééã£ãå€æ°ãæ¯èŒãããŠããå¯èœæ§ããããŸãã ãix0ãã®ç¢ºèªãæ€èšããŠãã ããã RvdLoggerVerifyTests.cpp 2395
NTSTATUS ReportLogStateDifferences(....) { .... for (ULONG ix0=0; ix0 < RecoveredState._NumberOfStreams; ix0++) { KWString streamId(....); ULONG ix1; for (ix1 = 0; ix0 < LogState._NumberOfStreams; ix1++) { ... } .... } .... }
ãã¹ããããã«ãŒãã®ç¶æ
ã§ã¯ããããã
ix0ã§ã¯ãªãå€æ°
ix1ããã§ãã¯ããå¿
èŠããããŸãã
V570 ãstatusDetails_ãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã ComposeDeploymentStatusQueryResult.cpp 49
ComposeDeploymentStatusQueryResult & ComposeDeploymentStatusQueryResult::operator = ( ComposeDeploymentStatusQueryResult && other)
ã»ãšãã©ã®å Žåã
圌ãã¯
other.statusDetails_ãã
statusDetails_ãã£ãŒã«ãã®å€ãååŸãããã£ãã®ã§ãããã¿ã€ããã¹ãããŸããã
V606ææè
ãªãããŒã¯ã³ãfalseãã CryptoUtility.Linux.h 81
template <typename TK, typename TV> static bool MapCompare(const std::map<TK, TV>& lhs, const std::map<TK, TV>& rhs) { if (lhs.size() != rhs.size()) { false; } return std::equal(lhs.begin(), lhs.end(), rhs.begin()); }
ããŒã¯ãŒããèŠã€ãããªããããã³ãŒããæé©ã§ã¯ãªããªã£ããšããäºå®ã«è³ããŸããã ã¿ã€ããã¹ã®ãããã³ã¬ã¯ã·ã§ã³ã®ãµã€ãºã®ã¯ã€ãã¯ãã§ãã¯ã¯ãäœæè
ãæå³ãããšããã«æ©èœããŸããã
V607 CWE-482
ææè
ã®ãªãè¡šçŸã EnvironmentOverrideDescription.cpp 60
bool EnvironmentOverridesDescription::operator == (....) const { bool equals = true; for (auto i = 0; i < EnvironmentVariables.size(); i++) { equals = EnvironmentVariables[i] == other.EnvironmentVariables[i]; if (!equals) { return equals; } } this->CodePackageRef == other.CodePackageRef;
ã¿ã€ããã¹ã¯åã®äŸãšäŒŒãŠããŸãããããæ·±å»ãªãšã©ãŒã«ã€ãªãããŸãã æ¯èŒã®1ã€ã®çµæã¯ä¿åãããŸããã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
equals = this->CodePackageRef == other.CodePackageRef; if (!equals) { return equals; }
é¢æ°ã®èª€ã£ã䜿çš
V521 CWE-480ãããæŒç®åã䜿çšãããã®ãããªåŒã¯å±éºã§ãã åŒãæ£ããããšã確èªããŠãã ããã ReplicatedStore.SecondaryPump.cpp 1231
ErrorCode ReplicatedStore::SecondaryPump::ApplyOperationsWithRetry(....) { .... if (errorMessage.empty()) { errorMessage = L"error details missing: LSN={0}", operationLsn; Assert::TestAssert("{0}", errorMessage); } .... }
ã¢ãã©ã€ã¶ãŒã¯ã
errorMessageå€æ°ã«ã¡ãã»ãŒãžãçæããããã®å¥åŠãªã³ãŒããæ€åºããŸããã é£æ¥ããã³ãŒããã©ã°ã¡ã³ãããå€æãããšã次ã®ããã«èšè¿°ããå¿
èŠããããŸãã
WriteInfo(errorMessage, L"error ....: LSN={0}", operationLsn);
V547 CWE-570åŒ 'nwrite <0'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸãããFile.cpp 1941
static void* ScpWorkerThreadStart(void* param) { .... do { size_t nwrite = fwrite(ptr, 1, remaining, destfile); if (nwrite < 0) { pRequest->error_.Overwrite(ErrorCode::FromErrno(errno)); break; } else { remaining -= nwrite; ptr += nwrite; pRequest->szCopied_ += nwrite; } } while (remaining != 0); .... }
fwriteïŒïŒé¢æ°ã®æ»ãå€ã®èª€ã£ããã§ãã¯ã ãã®æ©èœã®ããã¥ã¡ã³ãã¯
cppreference.comããã³
cplusplus.comã«ãããŸãã
V547 CWE-571åŒ 'len> = 0'ã¯åžžã«trueã§ãã 笊å·ãªãã®åã®å€ã¯åžžã«> = 0ã§ããTypes.cpp121
size_t BIO_ctrl_pending(BIO *b); template <typename TBuf> TBuf BioMemToTBuf(BIO* bio) { char* data = NULL; auto len = BIO_ctrl_pending(bio); Invariant(len >= 0); .... }
OpenSSLã©ã€ãã©ãªããã®é¢æ°ã®æ»ãå€ã®èª€ã£ããã§ãã¯ã ããã¯ãé倧ãªééããŸãã¯è匱æ§ã§ããå¯èœæ§ããããŸãã
ãã€ã³ã¿ãŒãšã¡ã¢ãªã«ã€ããŠ
V603 CWE-665ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãå Žåã¯ããthis-> JsonBufferManager2 :: JsonBufferManager2ïŒ....ïŒãã䜿çšããå¿
èŠããããŸãã JsonReader.h 48
class JsonBufferManager2 { template<typename T> friend struct JsonBufferManagerTraits; public: JsonBufferManager2() { JsonBufferManager2(nullptr, 0); } .... }
ãããããããã³ã³ã¹ãã©ã¯ã¿ãŒããå¥ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããšèããŠããŸããã ãããå®éã«ã¯ã
JsonBufferManager2ã¯ã©ã¹ã®äžæãªããžã§ã¯ãã
äœæãã ãããã«ç Žæ£ãããŸãã ãã®ã¿ã€ãã®ãšã©ãŒã«ã€ããŠã¯ãèšäºã
ãã©ãŒããç¥ããªããæ°Žã«å
¥ããªãïŒããŒã1 ãã§è©³ãã説æãããŠ
ããŸã ã åãèšäºã§ã¯ãããã³ã³ã¹ãã©ã¯ã¿ãŒãå¥ã®ã³ã³ã¹ãã©ã¯ã¿ãŒããåŒã³åºãæ¹æ³ã«ã€ããŠèª¬æããŠããŸãã
V568 ãsizeofïŒïŒãæŒç®åãã¯ã©ã¹ãžã®ãã€ã³ã¿ã®ãµã€ãºãè©äŸ¡ããã®ã¯å¥åŠã§ããããthisPtrãã¯ã©ã¹ãªããžã§ã¯ãã®ãµã€ãºã¯è©äŸ¡ããŸããã TimerQueue.cpp 443
void TimerQueue::SigHandler(int sig, siginfo_t *si, void*) { TimerQueue* thisPtr = (TimerQueue*)si->si_value.sival_ptr; auto written = write(thisPtr->pipeFd_[1], &thisPtr, sizeof(thisPtr)); Invariant(written == sizeof(thisPtr));
æ£ãã
sizeof ïŒïŒãwriteïŒïŒé¢æ°
ã«æž¡ãããŸããããèªã¿åãé¢æ°ã®çµæã¯ãã»ãšãã©ã®å Žåãèšé²ããããªããžã§ã¯ãã®ãµã€ãºãšæ¯èŒããå¿
èŠããããŸãã
Invariant(written == sizeof(*thisPtr));
V595 CWE-476 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããglobalDomainããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ196ã197ãPlacementReplica.cpp 196
void PlacementReplica::ForEachWeightedDefragMetric(....) const { .... size_t metricIndexInGlobalDomain = totalMetricIndexInGloba.... - globalDomain->MetricStartIndex; if (globalDomain != nullptr && globalDomain->Metrics[metricIndexInGlobalDomain].Weight > 0) { if (!processor(totalMetricIndexInGlobalDomain)) { break; } } }
globalDomainãã€ã³ã¿ãŒã䜿çšããéã®å
žåçãªééãïŒæåã«éåç
§ãã次ã«ãã§ãã¯ããŸãã
V611 CWE-762ã¡ã¢ãªã¯ãnew T []ãæŒç®åã䜿çšããŠå²ãåœãŠãããŸãããããdeleteãæŒç®åã䜿çšããŠè§£æŸãããŸããã ãã®ã³ãŒãã調ã¹ãããšãæ€èšããŠãã ããã ãdelete [] groups;ãã䜿çšããããšããå§ãããŸãã PAL.cpp 4733
NET_API_STATUS NetUserGetLocalGroups(....) { string unameA = utf16to8(UserName).substr(0, ACCT_NAME_MAX); int ngroups = 50; gid_t *groups = new gid_t[ngroups]; gid_t gid; .... delete groups; return NERR_Success; }
é
åã«å²ãåœãŠãããã¡ã¢ãªãééã£ãæ¹æ³ã§è§£æŸãããå€ãã®å ŽæããããŸããã
delete []ã䜿çš
ããå¿
èŠããããŸãã
Windowsã®ã³ã³ãããŒã§ã¢ãã©ã€ã¶ãŒãå®è¡ãã
ãã®å Žåãã¢ãã©ã€ã¶ãŒã®èµ·åã¯ãããšãã°å®éã®ã³ã³ãã¥ãŒã¿ãŒã®Jenkinsã§ã®åæã®èªååãšããã»ã©å€ãããŸããã ç§ãã¡ã¯Dockerã䜿çšããŠPVS-Studio for Windowsããã¹ãããŠããŸãã ã¢ãã©ã€ã¶ãŒãã€ã³ã¹ããŒã«ããã ãã§ååã§ãã
START /w PVS-Studio_setup.exe /VERYSILENT /SUPPRESSMSGBOXES \ /NORESTART /COMPONENTS=Core,Standalone
ãããžã§ã¯ãã®åæãéå§ããŸãã
"C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" ...
ãããã«
ãã®èšäºã®çŠç¹ã¯ãèå³æ·±ãã³ã³ãããŒåãã¯ãããžãŒã«ãããŸãããããã¯ãéçåæããããžã§ã¯ãã«çµ±åããäžã§ã®é害ã«ã¯ãªããŸããã ãã®ãããPVS-Studioã§èŠã€ãã£ãèŠåã¯ãã®èšäºã§ã¯ççž®ãããŸãããããã©ãŠã¶ãŒã®åœ¢åŒïŒ
service-fabric-pvs-studio-html.7zïŒã§å®å
šã«ããŠã³ããŒãã§ããŸãã
誰ããèªåã®ãããžã§ã¯ãã§
PVS-StudioãããŠã³ããŒãããŠè©Šãããšããå§ãããŸãã ãã®ã¢ãã©ã€ã¶ãŒã¯ãWindowsãLinuxãããã³macOSã§åäœããŸãïŒ

è±èªã話ãèŽè¡ãšãã®èšäºãå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã
Azure Service Fabricã³ãŒãã®äŸã§ã®Dockerã§ã®PVS-Studioèšå®ããã³å®è¡ã®æ©èœã