çŸåšãå€ãã®ãããžã§ã¯ãããœãŒã¹ã³ãŒããéããé¢å¿ã®ããéçºè ã®ã³ââãã¥ããã£ãã³ãŒããå€æŽã§ããããã«ãªã£ãŠããŸãã ãããã®ãããžã§ã¯ãã®1ã€ã§ããOpenJDKã確èªããéçºè ãã³ãŒããæ¹åã§ããããã«ããŸãã
ã¯ããã«
OpenJDK ïŒOpen Java Development KitïŒ -Javaãã©ãããã©ãŒã ïŒJava SEïŒã®å®è£ ãäœæãããããžã§ã¯ããç¡æã®ãªãŒãã³ãœãŒã¹ã³ãŒãã®ã¿ã§æ§æãããŠããŸãã ãã®ãããžã§ã¯ãã¯2006幎ã«Sunã«ãã£ãŠéå§ãããŸããã ãã®ãããžã§ã¯ãã§ã¯ãCãC ++ãããã³Javaã®è€æ°ã®èšèªã䜿çšããŸãã Cããã³C ++ã§èšè¿°ããããœãŒã¹ã³ãŒãã«èå³ããããŸãã æ€èšŒã®ããã«ãOpenJDKã®9çªç®ã®ããŒãžã§ã³ã䜿çšããŠãã ããã ãã®Javaãã©ãããã©ãŒã å®è£ ã®ã³ãŒãã¯ãMercurialãªããžããªã§å ¥æã§ããŸã ã
ãããžã§ã¯ãã¯ã PVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããŠæ€èšŒãããŸããã ç°¡åãªã³ãŒãã¹ãã£ã³ã§ã¯æ€åºãå°é£ãªãšã©ãŒãå«ããããã°ã©ãã³ã°äžã«çºçããå€æ°ã®ãšã©ãŒãèŠã€ããããšãã§ããå€ãã®èšºæã«ãŒã«ãå®è£ ããŠããŸãã ãããã®ãšã©ãŒã®äžéšã¯ããã°ã©ã ã®ããžãã¯ã«åœ±é¿ãäžãããäžéšã¯ããã°ã©ã ã®å®è¡ã«æ²æšãªçµæãããããå¯èœæ§ããããŸãã ã¢ãã©ã€ã¶ãŒãµã€ãã«ã¯ãä»ã®ãããžã§ã¯ãã§èŠã€ãã£ããšã©ãŒã®äŸããããŸãã åæã®ããã«ãèšèªCãC ++ãããã³CïŒã䜿çšãããããžã§ã¯ããå©çšå¯èœã§ãã ã¢ãã©ã€ã¶ãŒã®è©Šçšçã¯ãã¡ãããããŠã³ããŒãã§ããŸãã
è«çåŒã®ãšã©ãŒ
æåã«ãè«çåŒã®ãšã©ãŒãèæ ®ããŸãã
int StubAssembler::call_RT(....) { #ifdef _LP64 // if there is any conflict use the stack if (arg1 == c_rarg2 || arg1 == c_rarg3 || arg2 == c_rarg1 || arg1 == c_rarg3 || arg3 == c_rarg1 || arg1 == c_rarg2) { .... }
PVS-StudioèŠåïŒ V501ã||ãã®å·ŠåŽãšå³åŽã«åããµãåŒãarg1 == c_rarg3ãããããŸã æŒç®åã c1_Runtime1_x86.cpp 174
ã¢ãã©ã€ã¶ãŒã¯ããã§ãã¯arg1 == c_rarg3ã®éè€ãå ±åããŸãã ãã®ãã©ã°ã¡ã³ãã«ã¯ãåé·ãã§ãã¯ãŸãã¯ããã«æªãããšã«è«çãšã©ãŒãååšããŸãã ãããããéè€ããæ¡ä»¶ã®ä»£ããã«ãä»ã®äœãããã§ãã¯ãããã¹ãã§ããã éçºè ããã®ã³ãŒãã詳ããèŠãããšã¯çã«ããªã£ãŠããŸãã
åãæ¡ä»¶ã§ãå¥ã®ç¹°ãè¿ãåŒarg1 == c_rarg2ããããŸãã
PVS-StudioèŠåïŒ V501ã||ãã®å·ŠåŽãšå³åŽã«åããµãåŒãarg1 == c_rarg2ãããããŸã æŒç®åã c1_Runtime1_x86.cpp 174
ãããã®èŠåã¯ãç¹ã«éçã¢ãã©ã€ã¶ãŒã®å¿ èŠæ§ã瀺ããŠããŸãã åãã¿ã€ãã®å€æ°ã®åŒã§ã¯ãã³ãŒãã®è¡šé¢çãªã¬ãã¥ãŒã§ã¯æ€åºãå°é£ãªééããç¯ãã®ã¯éåžžã«ç°¡åã§ãã
次ã®ã¹ããããã¯ã Idealã¡ãœããã®æ¡ä»¶ã§ãäžå®å šãªããã§ãã¯ãæºãããŸããã
Node *AddLNode::Ideal(PhaseGVN *phase, bool can_reshape) { .... if( op2 == Op_AddL && in2->in(1) == in1 && op1 != Op_ConL && 0 ) { .... }
PVS-StudioèŠåïŒ V560æ¡ä»¶åŒã®äžéšã¯åžžã«falseã§ãïŒ0ãaddnode.cpp 435
0ã䜿çšããã®ã¯ããªãå¥åŠã§ããè«çåŒã§ã¯ãã»ãšãã©ã®å Žåããã®ã³ãŒãã¯ãŸã éçºäžã§ããããããã°ã®ããã«æ¡ä»¶ã¯äžå¯èœã«ãªããŸããã ã³ãŒãã«ã¯å¯Ÿå¿ããã³ã¡ã³ãã¯ãããŸããããã®å Žåãå°æ¥ã³ãŒããä¿®æ£ããã®ãå¿ããå¯èœæ§ãé«ããªããŸãã ãã®ãšã©ãŒã®çµæã¯ãè«çåŒã®è©äŸ¡çµæãåžžã«falseã«ãªãããããã®æ¡ä»¶å ã«ãããã¹ãŠã®ãã®ãå®è¡ãããããšã¯ãããŸããã
æäœã®åªå é äœ
å€ãã®å Žåãããã°ã©ããŒã¯åªå é äœã®ç¥èã«äŸåããŠãããè§æ¬åŒ§ã§è€éãªåŒã®ã³ã³ããŒãã³ãã匷調ããŠããŸããã
int method_size() const { return sizeof(Method)/wordSize + is_native() ? 2 : 0; }
èŠåPVS-StudioïŒ V502ãïŒïŒãæŒç®åã¯ãäºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããå¯èœæ§ããããŸãã ãïŒïŒãæŒç®åã¯ãã+ãæŒç®åãããåªå 床ãäœããªããŸãã method.hpp 249
ãã®å Žåãã³ãŒãã®è©³çŽ°ã¯ããããŸããããis_nativeïŒïŒé¢æ°ãåŒã³åºããçµæã«å¿ããŠé¢æ°ã '2'ãŸã㯠'0'ã®ãªãã»ããå€ãéžæããããšãèšç»ããŠããçãããããŸãããåŒã®èšç®é åºã¯ç°ãªããŸãã æåã«ã sizeofïŒã¡ãœããïŒ/ wordSize + is_nativeïŒïŒã®è¿œå ãå®è¡ãã ã次ã«çµæã2ãŸãã¯0ãè¿ããŸããã»ãšãã©ã®å Žåãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
{ return sizeof(Method)/wordSize + (is_native() ? 2 : 0); }
ããã¯éåžžã«äžè¬çãªæäœåªå 床ãšã©ãŒã§ãã ã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããããšã©ãŒã®ããŒã¿ããŒã¹ã§ã¯ãæãäžè¬çãªãšã©ãŒãç¹å®ãããèšäºã C / C ++ã®è«çåŒãã§èª¬æãããŠããŸãã å°é家ã¯ééã£ãŠããŸãã ã
ã³ããŒããŒã¹ã
次ã®ãšã©ãŒã®ç¹æ§ã°ã«ãŒãã¯ãã³ãŒãã®ã³ããŒã«é¢é£ããŠããŸãã ãã®ããã°ã©ããŒã®ãæ°ã«å ¥ãã®ããªãã¯ããéããããšã¯ã§ããŸããããããã£ãŠãã³ããŒããŒã¹ããé©çšãããå Žæã調ã¹ãŸãã
static int setImageHints(....) { .... if (dstCMP->isDefaultCompatCM) { hintP->allocDefaultDst = FALSE; hintP->cvtToDst = FALSE; } else if (dstCMP->isDefaultCompatCM) { hintP->allocDefaultDst = FALSE; hintP->cvtToDst = FALSE; } .... }
PVS-StudioèŠåïŒ V517ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ1873ã1877ãawt_ImagingLib.c 1873
ãã®äŸã§ã¯ã ifãšelse ifã®æ¡ä»¶ã¯å®å šã«åäžã§ãããå®è¡ããã³ãŒããåãã§ãã 2çªç®ã®æ¡ä»¶ã¯å®å šã«ç¡æå³ã§ããã決ããŠæºããããããšã¯ãããŸããã
å¥ã®åæ§ã®ã±ãŒã¹ïŒ
static int expandPackedBCR(JNIEnv *env, RasterS_t *rasterP, int component, unsigned char *outDataP) { .... /* Convert the all bands */ if (rasterP->numBands < 4) { /* Need to put in alpha */ for (y=0; y < rasterP->height; y++) { inP = lineInP; for (x=0; x < rasterP->width; x++) { for (c=0; c < rasterP->numBands; c++) { *outP++ = (unsigned char) (((*inP&rasterP->sppsm.maskArray[c]) >> roff[c]) <<loff[c]); } inP++; } lineInP += rasterP->scanlineStride; } } else { for (y=0; y < rasterP->height; y++) { inP = lineInP; for (x=0; x < rasterP->width; x++) { for (c=0; c < rasterP->numBands; c++) { *outP++ = (unsigned char) (((*inP&rasterP->sppsm.maskArray[c]) >> roff[c]) <<loff[c]); } inP++; } lineInP += rasterP->scanlineStride; } } .... }
PVS-StudioèŠåïŒ V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã awt_ImagingLib.c 2927
äž¡æ¹ã®ãããã¯ã®å®è¡å¯èœã³ãŒãã¯ããããåäžã§ãããæ¡ä»¶ã§èšç®ããããã®ã«éãã¯ãããŸããã ãã®å ŽæãèŠãŠäžèŠãªãã©ã³ããåé€ããããå¥ã®ããžãã¯ãæ瀺ãããŠããå Žåã¯ãã³ãŒãã調æŽããŠéè€ãåé¿ããã®ãçã«ããªã£ãŠããŸãã
éè€ãåãå Žæãããã«2ã€ãããŸãã ã³ãŒããªãã§ããããææããã ãã§ãã
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã awt_ImagingLib.c 3111
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã awt_ImagingLib.c 3307
ããŠãã³ããŒããŒã¹ããšã©ãŒã®å¯èœæ§ã«é¢é£ããæåŸã®èå³æ·±ãäŸïŒ
Node* GraphKit::record_profiled_receiver_for_speculation(Node* n) { .... ciKlass* exact_kls = profile_has_unique_klass(); bool maybe_null = true; if (java_bc() == Bytecodes::_checkcast || java_bc() == Bytecodes::_instanceof || java_bc() == Bytecodes::_aastore) { ciProfileData* data = method()->method_data()->bci_to_data(bci()); bool maybe_null = data == NULL ? true : <== data->as_BitData()->null_seen(); } return record_profile_for_speculation(n, exact_kls, maybe_null); return n; }
PVS-StudioèŠåïŒ V561æ°ãã«å®£èšãããããã 'maybe_null'å€æ°ã«å€ãå²ãåœãŠãæ¹ãããããè¯ãã§ãããã åã®å®£èšïŒgraphKit.cppãè¡2170ãgraphKit.cpp 2175
ãã®ã³ãŒãã§äœãèµ·ãã£ãŠããŸããïŒ ifãããã¯ã®åã«ãå€æ°bool maybe_null = trueã宣èšãããŠããŸãã ã 次ã«ã ifãããã¯ã§ã³ãŒããå®è¡ããããšãåãååã®å€æ°ã宣èšãããŸãã ãããã¯ãçµäºãããšããã®å€æ°ã®å€ã¯å€±ããããã®å€æ°ã䜿çšããé¢æ°ã®åŒã³åºãã¯ãããã®å Žåãtrueã«ãªããŸã ã ããŠããããã°ç®çã§ãã®å€æ°ãè€è£œãããå Žåã ãã以å€ã®å Žåããã®ã³ãŒãã¯æ£ããå®è¡ããããå€æŽãå¿ èŠã§ãã
maybe_null = data == NULL ? true : data->as_BitData()->null_seen();
ãã€ã³ã¿ãŒãæäœãã
ãã€ã³ã¿ãŒã®äžé©åãªäœ¿çšã¯ãèå¥ãå°é£ãªãšã©ãŒãåŒãèµ·ããå¯èœæ§ãããããããã€ã³ã¿ãŒã®æäœã«ã¯æ³šæãšæ£ç¢ºããå¿ èŠã§ãã ååãšããŠãäž»ãªå±éºã¯ãå£ãããã€ã³ã¿ãŒã®äœ¿çšããŸãã¯ãã«å€ããã§ãã¯ããã«ãã€ã³ã¿ãŒã䜿çšããããšã§ãã
æåã«ãnullãã€ã³ã¿ãŒãæ瀺çã«äœ¿çšããå ŽåãèããŸãã
static jint JNICALL cbObjectTagInstance(....) { ClassInstancesData *data; /* Check data structure */ data = (ClassInstancesData*)user_data; if (data == NULL) { data->error = AGENT_ERROR_ILLEGAL_ARGUMENT; return JVMTI_VISIT_ABORT; } .... }
PVS-StudioèŠåïŒ V522ãã«ãã€ã³ã¿ãŒãããŒã¿ãã®éåç §ãè¡ãããå ŽåããããŸãã util.c 2424
ãã«ãã€ã³ã¿ãŒã䜿çšãã絶察ã«ç解ã§ããªãã³ãŒãã¯ãããã°ã©ã ã®ã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸãã ããããããã®ãã©ã³ãã¯æ©èœããªãã£ããããããã°ã©ã ã®å®è¡äžã«åé¡ãåé¿ããããšãã§ããŸããã åããã¡ã€ã«ã«ããã«3ã€ã®é¡äŒŒããå ŽæããããŸããã
- V522 NULLãã€ã³ã¿ãŒãããŒã¿ãã®éåç §ãè¡ãããå ŽåããããŸãã util.c 2543
- V522 NULLãã€ã³ã¿ãŒãããŒã¿ãã®éåç §ãè¡ãããå ŽåããããŸãã util.c 2601
- V522 NULLãã€ã³ã¿ãŒãããŒã¿ãã®éåç §ãè¡ãããå ŽåããããŸãã util.c 2760
ãã ãã次ã®å Žåã¯ãnullãã€ã³ã¿ãŒã䜿çšããå¯èœæ§ãããæ·±ãé ãããŠããŸãã ããã¯éåžžã«äžè¬çãªç¶æ³ã§ããããã®ãããªèŠåã¯ãã§ãã¯ããããããžã§ã¯ãã®ã»ãšãã©ãã¹ãŠã§èŠã€ãããŸãã
static jboolean visibleClasses(PacketInputStream *in, PacketOutputStream *out) { .... else { (void)outStream_writeInt(out, count); for (i = 0; i < count; i++) { jbyte tag; jclass clazz; clazz = classes[i]; <== tag = referenceTypeTag(clazz); (void)outStream_writeByte(out, tag); (void)outStream_writeObjectRef(env, out, clazz); } } if ( classes != NULL ) <== jvmtiDeallocate(classes); .... return JNI_TRUE; }
PVS-StudioèŠå ïŒV595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã¯ã©ã¹ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ããã§ãã¯ããŠãã ããïŒ58ã66ãClassLoaderReferenceImpl.c 58
äžã®ãããã¯ã§ã¯ããã€ã³ã¿ãŒã®ãŒãå€ããã§ãã¯ãããŸããã€ãŸããããã°ã©ããŒã¯ãã€ã³ã¿ãŒå€ããŒãã«ãªãå¯èœæ§ãèªããŸãã ãã ããäžèšã®ãããã¯ã§ã¯ããã€ã³ã¿ãŒã¯ãã§ãã¯ããã«äœ¿çšãããŸãã ãããã£ãŠããã€ã³ã¿ãŒå€ããŒãã®å Žåããã®ãããªãã§ãã¯ã¯åœ¹ã«ç«ãããããã°ã©ã ã®ç°åžžçµäºãåãåããŸãã ãã®ãšã©ãŒãä¿®æ£ããã«ã¯ãäž¡æ¹ã®ãããã¯ã®äžã®ãã€ã³ã¿ãŒã確èªããå¿ èŠããããŸãã
å¥ã®åæ§ã®äŸãæããŸãããã
int InstructForm::needs_base_oop_edge(FormDict &globals) const { if( is_simple_chain_rule(globals) ) { const char *src = _matrule->_rChild->_opType; OperandForm *src_op = globals[src]->is_operand(); assert( src_op, "Not operand class of chain rule" ); return src_op->_matrule ? src_op->_matrule->needs_base_oop_edge() : 0; } // Else check instruction return _matrule ? _matrule->needs_base_oop_edge() : 0; }
PVS-StudioèŠåïŒ V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ã '_ matrule'ãã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ3534ã3540ãformssel.cpp 3534
ããã§ã¯ãäžé æŒç®å-_matruleã§ãã€ã³ã¿ãŒããã§ãã¯ãããŸããïŒ _matrule-> needs_base_oop_edgeïŒïŒïŒ0;ã ãããŠããã®ãã€ã³ã¿ãŒãžã®åçŽãªåŒã³åºãããããŸã-const char * src = _matrule-> _ rChild-> _ opType;ã ä¿®æ£ã®ã¬ã·ãã¯äŒŒãŠããŸãã䜿çšããåã«ãã€ã³ã¿ãŒã確èªããå¿ èŠããããŸãã ãã®ãããªå Žæã¯ããªããããŸããããããããªã¹ãããŸãã
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ã '_ pipeline'ãã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ3265ã3274ãoutput_c.cpp 3265
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããindex_boundããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ790ã806ãc1_RangeCheckElimination.cpp 790
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããg_type_initããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ94ã108ãGioFileTypeDetector.c 94
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããclassArrayããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1169ã1185ãJPLISAgent.c 1169
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããqããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ594ã599ãmpi.c 594
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããinfo.waitersããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ224ã228ãObjectReferenceImpl.c 224
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã¡ãœããããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ225ã229ãReferenceTypeImpl.c 225
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãããã£ãŒã«ãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ433ã437ãReferenceTypeImpl.c 433
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãããã¹ããããããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ538ã540ãReferenceTypeImpl.c 538
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã€ã³ã¿ãŒãã§ãŒã¹ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ593ã595ãReferenceTypeImpl.c 593
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããbufããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ265ã266ãps_proc.c 265
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã¢ãã¿ãŒããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ382ã387ãThreadReferenceImpl.c 382
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã¢ãã¿ãŒããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ557ã560ãThreadReferenceImpl.c 557
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãã眲åããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ520ã526ãdebugInit.c 520
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããBlackPointããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ192ã208ãcmssamp.c 192
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããnativenameããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ506ã511ãawt_Font.c 506
- V595 nullpsrã«å¯ŸããŠæ€èšŒãããåã«ããpseq-> seqããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ããã§ãã¯ïŒ788ã791ãcmsnamed.c 788
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããGammaTablesããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯ã©ã€ã³ïŒ1430ã1434ãcmsopt.c 1430
ããã°ã©ããŒã¯ãéã«ããã€ã³ã¿ãŒããã§ãã¯ããããšããããŸãããééã£ãŠããŸãã
FileBuff::FileBuff( BufferedFile *fptr, ArchDesc& archDesc) : _fp(fptr), _AD(archDesc) { .... _bigbuf = new char[_bufferSize]; if( !_bigbuf ) { file_error(SEMERR, 0, "Buffer allocation failed\n"); exit(1); .... }
PVS-StudioèŠåïŒ V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠããããããã_ bigbufããã€ã³ã¿ãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã filebuff.cpp 47
ãã®å Žåãnewã䜿çšããåŸã«_bigbufãã€ã³ã¿ãŒã§NULLå€ã確èªããŠãæå³ããããŸããã ã·ã¹ãã ãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãäŸå€ãçæãããé¢æ°ã®å®è¡ãåæ¢ããŸãã ãšã©ãŒãä¿®æ£ããã«ã¯ãããã€ãã®ã¢ãããŒãã䜿çšã§ããŸãã try catch blockã§ã¡ã¢ãªå²ãåœãŠãè¡ããã æ°ããïŒstd :: nothrowïŒã³ã³ã¹ãã©ã¯ãã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãŸããããã«ããã倱æããŠãäŸå€ã¯ã¹ããŒãããŸããã ãã®ãããªèª€ã£ããã§ãã¯ãããã€ããããŸãã
- V668ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããvspaceããã€ã³ã¿ãnullã«å¯ŸããŠãã¹ãããæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã psParallelCompact.cpp 455
- V668ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããuPtrããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã jni.cpp 113
ãã€ã³ã¿ãŒãæäœããéã®æåŸã®ééãã¯ãããã¿ã€ãã®ãã€ã³ã¿ãŒãå¥ã®ã¿ã€ãã®ãã€ã³ã¿ãŒã«æ瀺çã«ãã£ã¹ããããšãã«èµ·ãããŸããã
mlib_status mlib_convMxNext_f32(...) { mlib_d64 dspace[1024], *dsa = dspace; .... mlib_f32 *fsa; .... if (3 * wid_e + m > 1024) { dsa = mlib_malloc((3 * wid_e + m) * sizeof(mlib_d64)); if (dsa == NULL) return MLIB_FAILURE; } fsa = (mlib_f32 *) dsa; <== .... }
PVS-StudioèŠåïŒV615ãdouble *ãåãããfloat *ãåãžã®å¥åŠãªæ瀺çãªå€æã mlib_ImageConvMxN_Fp.c 294
float mlib_f32 * fsaãžã®ãã€ã³ã¿ãŒã¯ããã€ã³ã¿ãŒãdouble mlib_d64 dspace [1024]ã* dsa = dspaceã«å²ãåœãŠãããšããŸãã floatåãšdoubleåã¯ãµã€ãºãç°ãªããåæ§ã®åå€æã¯ããããééãã§ãã ãã£ã¹ããããåã®ãµã€ãºã®äžäžèŽã«ããã fsaãã€ã³ã¿ãŒã¯ãfloatåã«å¯ŸããŠæ£ãããªãæ°å€åœ¢åŒã瀺ããŸãã
å¥ã®ãã¡ã€ã«ã«ã¯ããã®ãããªåæ§ã®å€æãããã«2ã€ãããŸãããã®ã³ãŒããæ éã«ç¢ºèªããæ£ããåå€æã䜿çšããå¿ èŠããããŸãã
- V615ãdouble *ãåãããfloat *ãåãžã®å¥åŠãªæ瀺çãªå€æã mlib_ImageLookUp_Bit.c 525
- V615ãdouble *ãåãããfloat *ãåãžã®å¥åŠãªæ瀺çãªå€æã mlib_ImageLookUp_Bit.c 526
ããã§ããã€ã³ã¿ãŒã®äœ¿çšã«é¢é£ãããšã©ãŒã®èª¬æãçµäºããã¢ãã©ã€ã¶ãŒã®æ®ãã®èŠåã調æ»ããŸãã
ãã®ä»ã®ãšã©ãŒ
次ã®ãšã©ãŒã¯ãããããã³ãŒãã®ã³ããŒã®å€±æã®çµæã§ããããŸãã
static bool parse_bool (const char **pp, const char *end, unsigned int *pv) { .... /* CSS allows on/off as aliases 1/0. */ if (*pp - p == 2 || 0 == strncmp (p, "on", 2)) *pv = 1; else if (*pp - p == 3 || 0 == strncmp (p, "off", 2)) *pv = 0; else return false; return true; }
PVS-StudioèŠåïŒ V666é¢æ° 'strncmp'ã®3çªç®ã®åŒæ°ã調ã¹ãããšãæ€èšããŠãã ããã å€ãã2çªç®ã®åŒæ°ã§æž¡ãããæååã®é·ããšäžèŽããªãå¯èœæ§ããããŸãã hb-shape.cc 104
ãšã©ãŒãããã°ã©ã ã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããªãå Žåã¯ã次ã®ãšããã§ãã 3ã€ã®æåãæ¯èŒãã代ããã«ãæåã®2ã€ã ããæ¯èŒããŸããã³ãŒãã®äœæè ãç¹å¥ãªãã§ãã¯ãå®è¡ã§ããããšãé€å€ããŸããã ãããã¡ãŒpã®å€ã¯ãªã³ãŸãã¯ãªãã«ã§ãããããæåã®2æåãæ¯èŒããã ãã§ååã§ãã ããããé åºã®ããã«ãããªãã¯ãŸã ã³ãŒããä¿®æ£ããããšãã§ããŸãïŒ
else if (*pp - p == 3 || 0 == strncmp (p, "off", 3))
ã¯ã©ã¹ã®å®è£ ã§ãšã©ãŒãçºçããå¯èœæ§ã®ããå Žæãããã€ããããŸããã
class ProductionState { .... private: // Disable public use of constructor, copy-ctor, ... ProductionState( ) : _production(cmpstr, hashstr, Form::arena) { assert( false, "NotImplemented"); }; ProductionState( const ProductionState & ) : _production(cmpstr, hashstr, Form::arena) { assert( false, "NotImplemented"); }; // Deep-copy };
PVS-Studioã®èŠåïŒ V690ã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯ 'ProductionState'ã¯ã©ã¹ã§ãã©ã€ããŒããšããŠå®£èšãããŠããŸãããããã©ã«ãã® '='æŒç®åã¯ã³ã³ãã€ã©ãŒã«ãã£ãŠçæãããŸãã ãã®ãããªã¯ã©ã¹ã䜿çšããã®ã¯å±éºã§ãã dfa.cpp 76
ãã®ã¯ã©ã¹ã§ã¯ãã³ããŒãçŠæ¢ããããšããŸãããããã©ã€ããŒãé åã«ã³ããŒæŒç®åãè¿œå ããã®ãå¿ããŸããã ããã©ã«ãã§çæããã䜿çšå¯èœã«ãªããŸãã ãã®æŒç®åãçŸåšã³ãŒãã®ã©ãã§ã䜿çšãããŠããªããŠããå°æ¥èª°ãã誀ã£ãŠãããåŒã³åºããªããšããä¿èšŒã¯ãããŸããã ãã®ãããªæŒç®åãåŒã³åºããããšãã³ããŒãã¹ãã§ã¯ãªãã¯ã©ã¹ã«å¯ŸããŠã³ããŒããšã®ã³ããŒãçºçããŸãã ããã¯ãããã°ã©ã ãã¯ã©ãã·ã¥ãããŸã§ããŸããŸãªå¹æãããããå¯èœæ§ããããŸãã ãã®å ŽåãæŒç®å宣èšã=ãããã©ã€ããŒããšãªã¢ã«è¿œå ããå¿ èŠããããŸãã
åæ§ã®åé¡ãçºçããã¯ã©ã¹ãããã«2ã€ãããŸãããããã°ããŒã®æ³å ãã«éåããªãããã«èª¿æŽããããšããå§ãããŸãã
- V690ãMemRegionãã¯ã©ã¹ã¯ã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒãå®è£ ããŸãããã=ãæŒç®åããããŸããã ãã®ãããªã¯ã©ã¹ã䜿çšããã®ã¯å±éºã§ãã memRegion.hpp 43
- V690ã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯ 'Label'ã¯ã©ã¹ã§ãã©ã€ããŒããšããŠå®£èšãããŠããŸãããããã©ã«ãã® '='æŒç®åã¯åŒãç¶ãã³ã³ãã€ã©ãŒã«ãã£ãŠçæãããŸãã ãã®ãããªã¯ã©ã¹ã䜿çšããã®ã¯å±éºã§ãã assembler.hpp 73
æåŸã®ãšã©ãŒã¯åçŽãªã¿ã€ããã¹ã®ãããªãã®ã§ãïŒ
bool os::start_debugging(char *buf, int buflen) { int len = (int)strlen(buf); char *p = &buf[len]; .... if (yes) { // yes, user asked VM to launch debugger jio_snprintf(buf, sizeof(buf), "gdb /proc/%d/exe %d", os::current_process_id(), os::current_process_id()); os::fork_and_exec(buf); yes = false; } return yes; }
PVS-StudioèŠåïŒ V579 jio_snprintfé¢æ°ã¯ããã€ã³ã¿ãŒãšãã®ãµã€ãºãåŒæ°ãšããŠåãåããŸãã ééããããããŸããã 2çªç®ã®åŒæ°ã調ã¹ãŸãã os_linux.cpp 6094
ããã°ã©ããŒã¯ãããã¡ãŒã®é·ããæž¡ããããšèããŸãããããããããŒã«ã«ã«å®£èšãããé åã§ã¯ãªããé¢æ°ã®åŒæ°ã«å«ãŸãããã€ã³ã¿ãŒã§ããããšãèæ ®ããŸããã§ããã åŒsizeofïŒbufïŒãè©äŸ¡ããçµæããããã¡ãŒã®é·ãã§ã¯ãªãããã€ã³ã¿ãŒã®ãµã€ãºïŒ4ãã€ããŸãã¯8ãã€ãïŒãååŸããŸãã ãããã¡é·ããã§ã«ååŸãããŠããããããšã©ãŒãä¿®æ£ããã®ã¯ç°¡åã§ããintlen =ïŒintïŒstrlenïŒbufïŒ;ã æ£ãããªãã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
jio_snprintf(buf, len ....
ãããã«
å€ãã®äººã䜿çšãããã®å質ãç£èŠãããããžã§ã¯ãããã§ãã¯ããããšã¯åžžã«èå³æ·±ãã§ãã ããªãå€æ°ã®ãšã©ãŒãèŠã€ãã£ãããããã®èšäºã§ã¯ç¹å®ã®æ°ã®ãšã©ãŒã«ã€ããŠã®ã¿èª¬æããæ®ãã¯ãã詳现ãªèª¿æ»ãå¿ èŠã§ãã æ€åºããããšã©ãŒã«ãããéçã¢ãã©ã€ã¶ãŒã䜿çšããããšã®æå¹æ§ã確èªãããŸããåçŽãªç®ã§èŠããšæ€åºãå°é£ãªãšã©ãŒãæ€åºã§ããããã§ãã ãã°ãæ€çŽ¢ãããšãã«ããã°ã©ã ã®ãããã°ã«è²»ããæéãå€§å¹ ã«ç¯çŽã§ãããããã¢ãã©ã€ã¶ãç¶ç¶çã«äœ¿çšããããšãæãå¹æçã§ãã è©ŠçšçãããŠã³ããŒãããããšã§ããããžã§ã¯ãã§PVS-Studioéçã¢ãã©ã€ã¶ãŒã®äœæ¥ãè©Šãããšãã§ããããšãæãåºããŠãã ããã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã PVS-Studioã«ããOpenJDKãã§ã㯠ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã