æè¿ãPVS-Studioã¢ãã©ã€ã¶ãŒã®LinuxããŒãžã§ã³ããªãªãŒã¹ãããŸããã ãã®å©ããåããŠãå€ãã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãããã¹ããããŸããã ãããã®äžã«ã¯ãChromiumãGCCãLLVMïŒClangïŒãªã©ããããŸãã ãããŠä»æ¥ãä»®æ³çŸå®ã³ãã¥ããã£ã®ããã«ãŠã©ã«ããã£ãºããŒã¢ãã¡ãŒã·ã§ã³ã¹ã¿ãžãªãéçºãããããžã§ã¯ãããã®ãªã¹ãã«å ãããŸãã æ€åºãããã¢ãã©ã€ã¶ãŒã®èŠåã®ç¢ºèªãå§ããŸãããã
ãã£ãºããŒã«ã€ããŠå°ã
ãŠã©ã«ããã£ãºããŒã¯é·å¹Žã«ããããäžçäžã®ãã¬ãèŠèŽè
ãé
æçãªã¹ããŒãªãŒããã£ã©ã¯ã¿ãŒã§åã°ããå¿ããããªãäœéšãæäŸããŠããŸããã 幎ã
ããã£ãºããŒã¯ãŸããŸãåºæ¿çã§é¢çœããå®è£
ãé£ããæ ç»ã挫ç»ãçã¿åºããŠããŸãã ãããã£ãŠãèŠèŠå¹æã«é¢ããã¢ãŒãã£ã¹ãã®åµé çãªã¢ã€ãã¢ã®å®çŸã«è²¢ç®ããããŸããŸãªããã°ã©ã ã®éçºã«å¯ŸããããŒãºãé«ãŸã£ãŠããŸãã
Walt Disney Animation Studiosã®ããã°ã©ããŒã¯ãããŒãã£ã«ãªã¢ãªãã£æ¥çã®ãã¹ãŠã®ãŠãŒã¶ãŒåãã«ãªãŒãã³ãœãŒã¹Cããã³C ++ããã°ã©ã ãšããŠå©çšå¯èœãªæè¡ãäœæããããšã«ãããã¢ãã¡ãŒã·ã§ã³ããã³èŠèŠå¹æã®å°éå®¶ããµããŒãããŠããŸãã ãããã®ããã°ã©ã ã¯æ¬¡ã®ãšããã§ãã
- PartioïŒçµ±äžãããç»åã©ã€ãã©ãªãšåãåçã§å®è£
ãããåäžã®ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠæšæºã®ç²åãã¡ã€ã«åœ¢åŒã§äœæ¥ããããšãã§ããŸãïŒ
- AlembicïŒããžã¿ã«ã³ã³ãã³ãäœæããã±ãŒãžéã§ã¢ãã¡ãŒã·ã§ã³ã³ã³ãã¥ãŒã¿ãŒã°ã©ãã£ãã¯ã¹ã亀æããããã®æ¥çæšæºã«ãªãã€ã€ãããªãŒãã³äº€æåœ¢åŒïŒ
- ãŠãããŒãµã«ã·ãŒã³èšè¿°ïŒããŸããŸãªã°ã©ãã£ãã¯ã¢ããªã±ãŒã·ã§ã³éã§äº€æããããã®ã·ãŒã³ããŒã¿ã®èªã¿åããšéä¿¡ãå¯èœãªå¹ççãªã·ã¹ãã ïŒ
- OpenSubdivïŒçž®å°ã¢ãã«ã«åºã¥ããŠãµãŒãã§ã¹ïŒãµããã£ããžã§ã³ãµãŒãã§ã¹ïŒã®è©³çްãªã¬ã³ããªã³ã°ãæäŸïŒ
- DinamicaïŒAutodesk Mayaã®ãã©ã°ã€ã³ããªã¢ã«ã¿ã€ã ç©çãšã³ãžã³Bullet Physics Libraryã«åºã¥ããŠéçºïŒ
- PTexïŒãã¯ã¹ãã£ãããã³ã°ã·ã¹ãã ïŒ
ãã£ãºããŒã®ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã¯
https://disney.imtqy.com/ããããŠã³ããŒãã§ã
ãŸã ã
æ€èšŒçµæ
Walt Disneyãæ€èšããŠãããããžã§ã¯ãã¯å°èŠæš¡ã§ãCããã³C ++ã§æ°äžè¡ã®ã³ãŒããããªãã ãããã£ãŠããã®ãããªå°æ°ã®ãããžã§ã¯ããšã©ãŒã
ãã«ãã£ãªãããžã§ã¯ã
PVS-StudioèŠåïŒ V547åŒ '"R"'ã¯åžžã«çã§ãã PDA.cpp 90
ParticlesDataMutable* readPDA(....) { .... while(input->good()) { *input>>word; .... if(word=="V"){ attrs.push_back(simple->addAttribute(....); }else if("R"){
ã¢ãã©ã€ã¶ãŒã¯ãæ¡ä»¶ãåžžã«çã§ãããšããã¡ãã»ãŒãžãçºè¡ããŸããã ããã¯ã
elseãã©ã³ãã§å®çŸ©ãããŠããã¢ã¯ã·ã§ã³ãå®è¡ãããªããšããäºå®ã«ã€ãªãããŸãã ããã°ã©ããŒã®äžæ³šæã®ããã«ãã®ç¶æ³ãçºçãããšæããŸãããã®ãããªãšã©ãŒã«ã€ãªãããªãæ¡ä»¶ã¯æ¬¡ã®ããã«ãªããŸãã
.... if(word=="V"){ attrs.push_back(simple->addAttribute(....); }else if(word=="R"){
PVS-Studio èŠå ïŒ V528 ãcharãåãžã®ãã€ã³ã¿ãŒãã\ 0ãå€ãšæ¯èŒãããã®ã¯å¥åŠã§ãã ãããã以äžãæå³ããŸãïŒ* charArray [i]ïŒ= '\ 0'ã MC.cpp 109
int CharArrayLen(char** charArray) { int i = 0; if(charArray != false) { while(charArray[i] != '\0')
æ£ããçè§£ã§ããã°ã
CharArrayLen颿°ã¯
charArrayæååã®æåæ°ãã«ãŠã³ãããŸãã ããããããã¯æ¬åœã«ããã§ããïŒ ç§ã®æèŠã§ã¯ã
charåãžã®ãã€ã³ã¿ãŒãå€
'\ 0'ãšæ¯èŒãããããã
whileã«ãŒãã®ç¶æ
ã«ãšã©ãŒããããŸãã ãã€ã³ã¿ãŒã®éåç
§æäœãå¿ããããå¯èœæ§ãé«ãã§ãã ãããã£ãŠã
whileã«ãŒãã®æ¡ä»¶ã¯æ¬¡ã®ããã«ãªããŸãã
while ((*charArray)[i] != '\0')
ã¡ãªã¿ã«ãå°ãé«ãäœçœ®ã«ãããã§ãã¯ãéåžžã«å¥åŠã§ãã
if(charArray != false)
æ€èšŒã¯ãã¡ããæ©èœããŸããããããæ¬¡ã®ããã«çœ®ãæããæ¹ãã¯ããã«åªããŠããŸãã
if(charArray != nullptr)
äžè¬çã«ãç ä¿®çãæ©èœãéçºããŠããããå®äºããŠããªãããã§ãã
strlenïŒïŒé¢æ°ã䜿çšããŠã³ãŒããèšè¿°ããªãçç±ã¯æããã§ã¯ãããŸããã
int CharArrayLen(const char** charArray) { if (charArray == nullptr) return 0; return strlen(*charArray); }
PVS-Studio èŠå ïŒ V701 reallocïŒïŒãªãŒã¯ã®å¯èœæ§ïŒreallocïŒïŒãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãå
ã®ãã€ã³ã¿ãŒ 'attributeData [i]'ã倱ãããŸãã reallocïŒïŒãäžæãã€ã³ã¿ãŒã«å²ãåœãŠãããšãæ€èšããŠãã ããã ParticleSimple.cpp 266
ParticleIndex ParticlesSimple:: addParticle() { .... for(unsigned int i=0;i<attributes.size();i++) attributeData[i]= (char*)realloc(attributeData[i],
ã¢ãã©ã€ã¶ãŒã¯ãã³ãŒãã§
reallocã®å±éºãªäœ¿çšãæ€åºããŸããã
foo = reallocïŒfooã...ïŒã®æ§é ã¯å±éºã§ããã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå Žåã颿°ã¯
nullptrãè¿ãããããã€ã³ã¿ã®ä»¥åã®å€ãäžæžããããã¡ã¢ãªãªãŒã¯ãããã°ã©ã ã®ã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸãã ããããããã®ç¶æ³ã¯å€ãã®å Žåéåžžã«ãŸãã§ãããå®å
šã«ãã¬ã€ãã䟡å€ã¯ãŸã ãããšæããŸãã ãã®ç¶æ³ãé²ãããã«ã
reallocã䜿çšããåã«ã远å ã®å€æ°ã«ãã€ã³ã¿ãŒå€ãä¿åããããšããå§ãããŸãã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V701 reallocïŒïŒãªãŒã¯ã®å¯èœæ§ïŒreallocïŒïŒãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãå
ã®ãã€ã³ã¿ 'attributeData [i]'ã倱ãããŸãã reallocïŒïŒãäžæãã€ã³ã¿ãŒã«å²ãåœãŠãããšãæ€èšããŠãã ããã ParticleSimple.cpp 280
- V701 reallocïŒïŒãªãŒã¯ã®å¯èœæ§ïŒreallocïŒïŒãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãå
ã®ãã€ã³ã¿ 'data'ã倱ãããŸãã reallocïŒïŒãäžæãã€ã³ã¿ãŒã«å²ãåœãŠãããšãæ€èšããŠãã ããã ParticleSimpleInterleave.cpp 281
- V701 reallocïŒïŒãªãŒã¯ã®å¯èœæ§ïŒreallocïŒïŒãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãå
ã®ãã€ã³ã¿ 'data'ã倱ãããŸãã reallocïŒïŒãäžæãã€ã³ã¿ãŒã«å²ãåœãŠãããšãæ€èšããŠãã ããã ParticleSimpleInterleave.cpp 292
ã¢ã¬ã³ããã¯ãããžã§ã¯ã
PVS-StudioèŠåïŒ V501 ã||ãã®å·Šãšå³ã«åããµãåŒãm_uKnotãããããŸã æŒç®åã ONuPatch.h 253
class Sample { public: .... bool hasKnotSampleData() const { if( (m_numU != ABC_GEOM_NUPATCH_NULL_INT_VALUE) || (m_numV != ABC_GEOM_NUPATCH_NULL_INT_VALUE) || (m_uOrder != ABC_GEOM_NUPATCH_NULL_INT_VALUE) || (m_vOrder != ABC_GEOM_NUPATCH_NULL_INT_VALUE) || m_uKnot || m_uKnot)
ç¹°ãè¿ããŸãããããã°ã©ããŒã®äžåšã«é¢ãããšã©ãŒã§ãã ç¹°ãè¿ããã£ãŒã«ã
m_uKnotã®ä»£ããã«ãæ¡ä»¶ã
m_vKnotã§ãããšæšæž¬ããã®ã¯ç°¡åã§ãã
PVS-StudioèŠåïŒ V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã OFaceSet.cpp 230
void OFaceSetSchema::set( const Sample &iSamp ) { .... if ( iSamp.getSelfBounds().hasVolume() ) {
PVS-Studioã¯ãã³ãŒãå
ã§
if..elseã¹ããŒãã¡ã³ããæ€åºããŸãããããã¯ãç°ãªãã³ã¡ã³ãã«ãããããããäž¡æ¹ã®çµæã§åãããšãå®è¡ããŸãã ã³ãŒãã®ãã®ã»ã¯ã·ã§ã³ã¯ãããã°ã©ããŒããŒã ã®æ¬¡ã®ã¿ã¹ã¯ã®ãã¥ãŒã«æ¶ããŠããå¯èœæ§ããããŸãããçŸæç¹ã§ã¯ããã®ã³ãŒãã®ã»ã¯ã·ã§ã³ã¯èª€ãã§ãããæ¹åããå¿
èŠããããŸãã
PVS-StudioèŠåïŒ V629 ã1 << iStreamIDãåŒã®æ€æ»ãæ€èšããŠãã ããã 32ãããå€ã®ãããã·ãããšãããã«ç¶ã64ãããã¿ã€ããžã®æ¡åŒµã StreamManager.cpp 176
void StreamManager::put( std::size_t iStreamID ) { ....
ã¢ãã©ã€ã¶ãŒã¯ãã·ããæäœãå«ãåŒã«æœåšçãªãšã©ãŒãæ€åºããŸããã
åŒ
newVal = oldVal | ïŒ1 << iStreamIDïŒ intãšããŠè¡šãããåäœãã·ããããããã®åŸãã·ããçµæã64ãããåã«å€æãããŸãã ããã§ã®æœåšçãªãšã©ãŒã¯ã
iStreamID倿°ã®å€ã32ãè¶
ããå Žåãæªå®çŸ©ã®åäœã®ããã«ã³ãŒãã®ãã®ã»ã¯ã·ã§ã³ãæ£ããæ©èœããªãããšã§ãã
æ°å€1ã64ãããã®ç¬Šå·ãªãããŒã¿åã§è¡šãããå Žåãã³ãŒãã¯ããå®å
šã«ãªããŸãã
newVal = oldVal | ( Alembic::Util::int64_t(1) << iStreamID );
ã¢ãã©ã€ã¶ãŒã¯å¥ã®èŠåãçºè¡ããŸããïŒ
- V629ã1 <<ïŒval-1ïŒãåŒã®æ€æ»ãæ€èšããŠãã ããã 32ãããå€ã®ãããã·ãããšãããã«ç¶ã64ãããã¿ã€ããžã®æ¡åŒµã StreamManager.cpp 148
ãŠãããŒãµã«ã·ãŒã³èšè¿°ãããžã§ã¯ã
PVS-StudioèŠåïŒ V668ã¡ã¢ãªããæ°ãããæŒç®åã䜿çšããŠå²ãåœãŠããããããã_ rawBufferããã€ã³ã¿ãnullã«å¯ŸããŠãã¹ãããæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã uvTextureStorageData.cpp 118
bool GlfUVTextureStorageData::Read(....) { .... _rawBuffer = new unsigned char[_size];
çŸä»£ã®èšèªæšæºã«ããã°ãã¡ã¢ãªå²ãåœãŠã倱æããå Žåã®
newã¯
nullptrãè¿ãã®ã§ã¯ãªããäŸå€ãã¹ããŒããŸãã ãã®ã³ãŒãã¯ãããã°ã©ãã³ã°ã®å€é¢šãªãã®ã§ãã ææ°ã®ã³ã³ãã€ã©ã§ã¯ããããã®ãã§ãã¯ã¯æå³ããªããªããããåé€ã§ããŸãã
PVS-StudioèŠåïŒ V501 '|'ã®å·Šãšå³ã«åããµãåŒ 'HdChangeTracker :: DirtyPrimVar'ããããŸã æŒç®åã baseCurves.cpp 563
HdBasisCurves::_GetInitialDirtyBits() const { int mask = HdChangeTracker::Clean; mask |= HdChangeTracker::DirtyPrimVar
maskãæ±ºå®ããããã«ãå€ãã®ãã£ãŒã«ãã䜿çšãããŸãããããã®äžã«ã¯ç¹°ãè¿ããã£ãŒã«ãããããŸãã ãã®ãããããã°ã©ãã¯åããã£ãŒã«ããäžæ³šæã«å床䜿çšãããã
DirtyPrimVarãã£ãŒã«ããç¹°ãè¿ã代ããã«å¥ã®ãã£ãŒã«ãã䜿çšããå¿
èŠã
ãããŸãã
åæ§ã®èŠåïŒ
- V501ã|ãã®å·Šãšå³ã«åäžã®ãµãåŒãHdChangeTracker :: DirtyPrimVarãããããŸã æŒç®åã mesh.cpp 1199
OpenSubdivãããžã§ã¯ã
PVS-StudioèŠåïŒ V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããå®å
ããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ481ã483ãhbr_utils.h 481
template <class T> void createTopology(....) { .... OpenSubdiv::HbrVertex<T> * destination = mesh->GetVertex( fv[(j+1)%nv] ); OpenSubdiv::HbrHalfedge<T> * opposite = destination->GetEdge(origin);
ãããããV595ã¯ã¢ãã©ã€ã¶ãŒã«ãã£ãŠçºè¡ãããæãäžè¬çãªèŠåã§ãã PVS-Studioã¯ããã€ã³ã¿ãŒãéåç
§ãããã³ãŒãã®äžã§ãã§ãã¯ãããå Žåãã³ãŒããå±éºãšèŠãªããŸãã ãã€ã³ã¿ãŒããã§ãã¯ãããŠããå ŽåããŒãã§ãããšæ³å®ãããŸãã
ãããäžèšã®ã³ãŒãã»ã¯ã·ã§ã³ã§çºçããŸãã
å察ã®ãã€ã³ã¿ãŒãåæåããããã«ã
å®å
ãã€ã³ã¿ãŒãéåç
§ãã
ãæ¬¡ã«ãããã®ãã€ã³ã¿ãŒã
NULLã«ã€ããŠãã§ãã¯ãã
ãŸã ã
ããã«ããã€ãã®èŠåïŒ
- V595 nulldestrã«å¯ŸããŠæ€èšŒãããåã«ããå®å
ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ145ã148ãhbr_tutorial_1.cpp 145
- V595 nulldestrã«å¯ŸããŠæ€èšŒãããåã«ããå®å
ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ215ã218ãhbr_tutorial_2.cpp 215
PVS-Studio èŠå ïŒ V547åŒ 'buffer [0] ==' \ r '&& buffer [0] ==' \ n ''ã¯åžžã«falseã§ãã ãããã '||' ããã§æŒç®åã䜿çšããå¿
èŠããããŸãã hdr_reader.cpp 84
unsigned char *loadHdr(....) { .... char buffer[MAXLINE];
ããã°ã©ããŒãæ¡ä»¶ã®èšè¿°ãééãããããæ¡ä»¶ãåžžã«
falseã§ãããšããäºå®ã«è³ããŸããã ããããããã°ã©ããŒã¯ã
\ nã
\ r \ nãªã©ã®è¡ããŒã«ãŒãååšããå Žåã¯ã
whileã«ãŒããçµäºããå¿
èŠããã
ãŸã ã ãããã£ãŠããšã©ãŒç¶æ
ã¯æ¬¡ã®ããã«èšè¿°ããå¿
èŠããããŸãã
if (buffer[0] == '\r' && buffer[1] == '\n') break;
PVS-StudioèŠåïŒ V593 ãA = BïŒ= Cããšãã衚çŸãæ€èšããããšãæ€èšããŠãã ããã åŒã¯æ¬¡ã®ããã«èšç®ãããŸãïŒ 'A =ïŒBïŒ= CïŒ'ã main.cpp 652
main(int argc, char ** argv) { .... #if defined(OSD_USES_GLEW) if (GLenum r = glewInit() != GLEW_OK) {
ã¢ãã©ã€ã¶ãŒã¯ãåŒ
GLenum r = glewInitïŒïŒïŒ= GLEW_OKã§æœåšçãªãšã©ãŒãæ€åºããŸããããããã¯ããããããã°ã©ããŒãæå³ãããšããã«æ©èœããŸããã ãã®ãããªã³ãŒããäœæããããšã«ãããããã°ã©ããŒã¯ãååãšããŠã次ã®é åºã§ã¢ã¯ã·ã§ã³ãå®è¡ããããšãæã¿ãŸãã
(GLenum r = glewInit()) != GLEW_OK
ãã ãããïŒ=ãæŒç®åã®åªå
é äœã¯ãå²ãåœãŠæŒç®åã®åªå
é äœãããé«ããªã£ãŠããŸãã ãããã£ãŠãåŒã¯æ¬¡ã®ããã«è©äŸ¡ãããŸãã
GLenum r = (glewInit() != GLEW_OK)
ãããã£ãŠã
glewInitïŒïŒé¢æ°
ãæ£ããæ©èœ
ããªãå Žåãç»é¢ã«èª€ã£ããšã©ãŒã³ãŒããåºåãããŸãã ããæ£ç¢ºã«ã¯ããŠãããã¯åžžã«å°å·ãããŸãã
ãšã©ãŒãä¿®æ£ããã«ã¯ããã©ã±ããã䜿çšããããæ¡ä»¶ã®å¶éãè¶
ããŠãªããžã§ã¯ãã®äœæãåé€ããŸããããã«ãããã³ãŒããããèªã¿ããããªããŸãã ã
ããã°ã©ãã³ã°ããªãã¡ã¯ã¿ãªã³ã°ããã®ä»ãã¹ãŠã®åé¡ ããšããæ¬ã®ç¬¬16ç« ãåç
§ããŠãã ããã
PVS-Studioã¯ãããã«ããã€ãã®åæ§ã®å ŽæãçºèŠããŸããã
- V593ãA = BïŒ= Cãã®è¡šçŸãæ€èšããããšãæ€èšããŠãã ããã åŒã¯æ¬¡ã®ããã«èšç®ãããŸãïŒ 'A =ïŒBïŒ= CïŒ'ã glEvalLimit.cpp 1419
- V593ãA = BïŒ= Cãã®è¡šçŸãæ€èšããããšãæ€èšããŠãã ããã åŒã¯æ¬¡ã®ããã«èšç®ãããŸãïŒ 'A =ïŒBïŒ= CïŒ'ã glStencilViewer.cpp 1128
- V593ãA = BïŒ= Cãã®è¡šçŸãæ€èšããããšãæ€èšããŠãã ããã åŒã¯æ¬¡ã®ããã«èšç®ãããŸãïŒ 'A =ïŒBïŒ= CïŒ'ã farViewer.cpp 1406
PVS-Studio èŠå ïŒ V701 reallocïŒïŒãªãŒã¯ã®å¯èœæ§ïŒreallocïŒïŒãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãå
ã®ãã€ã³ã¿ãŒãm_blocksãã倱ãããŸãã reallocïŒïŒãäžæãã€ã³ã¿ãŒã«å²ãåœãŠãããšãæ€èšããŠãã ããã allocator.h 145
template <typename T> T* HbrAllocator<T>::Allocate() { if (!m_freecount) { ....
ç¹°ãè¿ããŸããã
realloc颿°ã®å±éºãªäœ¿çšã ãããŠããªããããå±éºãªã®ãã«ã€ããŠã¯ããPartioãããžã§ã¯ããã®ã»ã¯ã·ã§ã³ã§èª¬æããŠããŸãã
Dynamicaãããžã§ã¯ã
PVS-StudioèŠåïŒ V512 ãmemsetã颿°ãåŒã³åºããšããããã¡ãŒãheader.paddingãããªãŒããŒãããŒããŸãã pdbIO.cpp 249
struct pdb_header_t { int magic; unsigned short swap; float version; float time; unsigned int data_size; unsigned int num_data; char padding[32];
ã¢ãã©ã€ã¶ã¯ã
header.paddingã¡ã¢ãªãããã¡ã®å
å¡«ã«é¢é£ããæœåšçãªãšã©ãŒãæ€åºããŸããã ããã°ã©ã
ã¯ãmemsetã䜿çšããŠã
header.paddingãããã¡å
ã®36ãã€ãããªã»ããããŸã
ãããã¯32ãã€ãã®ã¿ã§æ§æãããŠããŸã
ã äžèŠããã®äœ¿çšã¯ééã£ãŠããŸãããå®éãããã°ã©ããŒã¯æ±ãã«ããããšã倿ãã
header.paddingãšãšãã«
ããŒã¿å€æ°ããªã»ããããŸã
ã çµå±ã
pdb_header_tæ§é äœã®
ããã£ã³ã°ãš
ããŒã¿ ãã£ãŒã«ãã¯é çªã«é
眮ãããŸããã€ãŸããããããã¡ã¢ãªå
ã«é çªã«é
眮ãããŸãã ã¯ãïŒ ãã®ç¶æ³ã«ééãã¯ãããŸãããããã®å Žæã§ã®ãã®ãããªããªãã¯ã«ããããšã©ãŒãçºçããå¯èœæ§ããããŸãã ããšãã°ãå¥ã®ããã°ã©ãã
pdb_header_tã®æ§é ã倿Žãã
ããã£ã³ã°ãã£ãŒã«ããš
ããŒã¿ãã£ãŒã«ãã®éã«èªåã®ãã£ãŒã«ãã远å ããŠããååã®ããªãã¯ã«æ°ä»ããªãå Žåã ãããã£ãŠãå倿°ãåå¥ã«ãªã»ããããããšããå§ãããŸãã
Ptexãããžã§ã¯ã
PVS-StudioèŠåïŒ V612ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ãæ»ããã PtexHashMap.h 292
Entry* lockEntriesAndGrowIfNeeded(size_t& newMemUsed) { while (_size*2 >= _numEntries) { Entry* entries = lockEntries(); if (_size*2 >= _numEntries) { entries = grow(entries, newMemUsed); } return entries; } return lockEntries(); }
äžèšã®é¢æ°ã«ã¯ãæåã®ãã¹ã§
ãšã³ããªãžã®ãã€ã³ã¿
ãè¿ãããçããã
whileã«ãŒãããã
ãŸã ã ããã§äœããæ··ä¹±ããŠãããšæããŸãããïŒ ã³ãŒãã®ãã®ã»ã¯ã·ã§ã³ã§ã¯ãããè©³çŽ°ãªæ€èšãå¿
èŠã§ãã
ãããã«
é«å質ã®ãœãããŠã§ã¢ãäœæããéã®éçã³ãŒãåæã¯éåžžã«éèŠãªåœ¹å²ãæãããŸããéçåæã宿çã«äœ¿çšããããšã§ãæããªãšã©ãŒãæ€åºãé£ãããšã©ãŒãæé€ããããã®åŽåãæžããæçšãªãã®ã«ããå€ãã®æéãè²»ããããšãã§ããããã§ãã
ãããžã§ã¯ãã®ãšã©ãŒããŸã 確èªããŠãããããã°ã®ãšããµã€ãã£ã³ã°ãªæ€çŽ¢ã«çæããŠããªãå Žåã¯ã
PVS-Studio for LinuxãããŠã³ããŒãããŠãå¿
ã
å®è¡ããããšããå§ãããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒMaxim Stefanovã
PVS-Studio for Linuxã¯ããã£ãºããŒåšèŸºãã¢ãŒã«åå ããŸãã ã