
ãã®èšäºã§ã¯ãäŸãšããŠãªãŒãã³ãœãŒã¹ã®Wiresharkãããžã§ã¯ãã䜿çšããŠãC / C ++ã®ããã°ã©ã ã³ãŒãã®éçåæã«PVS-Studioã䜿çšããæ¹æ³ã説æããŸãã ãŸããWiresharkãããã¯ãŒã¯ãã©ãã£ãã¯ã¢ãã©ã€ã¶ãŒãšPVS-Studio補åã®ç°¡åãªèª¬æããå§ããŸãã ã¢ã»ã³ããªããã»ã¹ã®èœãšãç©Žãšéç解æã®ããã®ãããžã§ã¯ãã®æºåã«ã€ããŠèª¬æããŸãã PVS-Studio補åã®å šäœåããã®å©ç¹ã䜿ãããããå³ããã¢ãã©ã€ã¶ãŒã®èŠåãã³ãŒãäŸãç¬èªã®ã³ã¡ã³ããæäŸããŸãã
Wiresharkãããã¯ãŒã¯ãã©ãã£ãã¯ã¢ãã©ã€ã¶ãŒ
PVS-Studioã®æ©èœãå®èšŒããã«ã¯ãããç¥ãããŠããŠäŸ¿å©ã§èå³æ·±ããªãŒãã³ãœãŒã¹ãããžã§ã¯ããèŠã€ããå¿ èŠããããŸãããããã®åæã¯ãŸã 誰ãè¡ã£ãŠããŸããã§ããã Wiresharkã«èœã¡çããŸããã 圌ã¯åœŒã«ç¡é¢å¿ã§ã¯ãããŸãããããªãã圌ã«ã€ããŠãŸã ç¥ããªããªãããããããã®èšäºãèªãã åŸã圌ã«å¯Ÿããç§ã®æ°æã¡ãå ±æããŠãã ããã
ã€ã³ã¿ãŒãããã®æ¥éãªçºå±ãšããã«ãŒããã°ã©ããŒã«é¢ããå€æ°ã®æ ç»ã¯ãé·ãéã³ã³ãã¥ãŒã¿ãŒãããã¯ãŒã¯ã«æ³šç®ãéããŠããŸããã ãããŠä»ãç§ã¯ãã»ãã¥ãªãã£ãæ°ã«ããè³æ Œã®ããã·ã¹ãã 管çè ãšããã°ã©ãã¯ããããã¯ãŒã¯æè¡ãç解ããå¿ èŠãããããã«æããŸãã
ãããã¯ãŒã¯ã¯ãç¹å®ã®ãããã³ã«ã«ããããŒã¿ã®åä¿¡ãšéä¿¡ã«åºã¥ããŠããŸãã ãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãšãããã³ã«ã®ç 究ãè¡ãããããã¯ãŒã¯ã®åé¡ãèŠã€ããéèŠãªããšã«ã¯ãããã®åé¡ã®åå ãèŠã€ããããã«ããããã¯ãŒã¯ãã©ãã£ãã¯ãŸãã¯ã¹ããã¡ãŒããã£ããã£ããã³åæããããã®ããŒã«ã䜿çšããå¿ èŠããããŸãã
Wiresharkã¯ãã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãããã¯ãŒã¯ãã©ãã£ãã¯ããã£ããã£ããã³åæããããã®æåãªããŒã«ã§ãã ãã®ããã°ã©ã ã¯ãPcapãããã¯ãŒã¯ãã©ãã£ãã¯ããã£ããã£ããããã®ã©ã€ãã©ãªã«åºã¥ããŠãããæ¢ç¥ã®ãããã¯ãŒã¯ãããã³ã«ãã±ããã®å€§åã解æããŠãããããã¬ãã«ã®åãããã³ã«ãã£ãŒã«ãã®å€ã衚瀺ã§ããŸãã
Wiresharkã¯ãWindowsããã³Linuxã§å®è¡ããããã«èšèšãããç¡æã®GNU GPLã®äžã§é åžãããã¯ãã¹ãã©ãããã©ãŒã ããŒã«ã§ãã ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããã«ã¯ãGTK +ããã³Qtã©ã€ãã©ãªã䜿çšããŸãã
ããã°ã©ã ã®ããã¥ã¡ã³ããšãœãŒã¹ã³ãŒãã¯ã Webãµã€ãã«ãããŸãã
PVS-Studio Static Code Analyzer
éçã³ãŒãåæã«ãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ãäœæ¥ç°å¢ã«é¢ä¿ãªããœãããŠã§ã¢ã®ãšã©ãŒãèŠã€ããããšãã§ããŸãã éçåæã䜿çšãããšããœãããŠã§ã¢è£œåã®å質ãåäžãããéçºãšãã¹ãã®æéãççž®ããã»ãã¥ãªãã£ã確ä¿ã§ããŸãã
PVS-Studioã¯ãMS Visual C ++ãGNU GCCïŒMinGWïŒãClangãBorland C ++ã³ã³ãã€ã©ããµããŒãããéçC / C ++ / C ++ 11ã³ãŒãã¢ãã©ã€ã¶ãŒã§ãã
PVS-Studioã«ã¯æ¬¡ã®èšºæãå«ãŸããŠããŸãã
- æ±çšèšºæ;
- 64ããããšã©ãŒã®èšºæã
- å¯èœãªæé©åã®èšºæã
Wiresharkãããžã§ã¯ãã®æ§ç¯
éçåæãè¡ãã«ã¯ãWireshark 1.12.4ã®ææ°ã®å®å®ããŒãžã§ã³ã®ãœãŒã¹ãããŠã³ããŒãããŸãã Visual Studio 2013ã«å«ãŸããã³ã³ãã€ã©ã䜿çšããŠãWin64ãã©ãããã©ãŒã çšã®Windows 7ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãã«ãããŸããããã«ãQt SDK 5.4.1ããã³WinPcap 4.1.3ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
nmakeã䜿çšããŠã³ãã³ãã©ã€ã³ãããã«ãããŸãã ã¢ã»ã³ããªã¹ã¯ãªãããæ£ããæ©èœãããã«ã¯ãCygwinããã³Python 2.7.9ãã€ã³ã¹ããŒã«ããŸãã
ã¢ã»ã³ããªã«é¢ããè¿œå æ å ±ã¯ã Webãµã€ãã§èŠã€ããããšãã§ããŸãã
ã¢ã»ã³ããªã¯æ瀺ã«åŸã£ãŠå®å šã«å®è¡ããããšããäºå®ã«ãããããããå€ãã®ãšã©ãŒãçºçããŸããã ããããæé€ããã«ã¯ããããå¿ èŠã§ããïŒ
- PATHç°å¢å€æ°ã«Cygwinãžã®ãã¹ãèšè¿°ããŠãã³ã³ãœãŒã«ããbashã·ã§ã«ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
- Cygwinã§NTFSã®ã¢ã¯ã»ã¹å¶åŸ¡ACLãç¡å¹ã«ããŠãææè ã«ãã¡ã€ã«ã®æžã蟌ã¿ãèªã¿åããå®è¡ã®æš©éãä»äžããŸãã
- ãªãã·ã§ã³ã®dos2unixããã±ãŒãžãCygwinã«ã€ã³ã¹ããŒã«ããŸãã ãªããªã ã³ã³ãã€ã«ã«ã¯u2dãŠãŒãã£ãªãã£ãå¿ èŠã§ããã
- nmakeã®cleanã³ãã³ããæ©èœããããã«ãMakefile.nmakeãã¡ã€ã«ããasn1 \ hnbapããããasn1 \ kerberosãã«ã³ããŒããå¿ èŠããããŸããã
PVS-Studioã䜿çšããéç解æ
ã©ã€ã»ã³ã¹ä»ãã§PVS-Studio 5.25ãã€ã³ã¹ããŒã«ããŸããããããã°ã©ã ãåããŠäœ¿çšããå Žåã¯ã ãã¢ããŒãžã§ã³ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ã§ããŸãã
ãã©ã€ã¢ã«ã¢ãŒãã§ã¯ãèŠåã¯æåã®ã¬ãã«ã§ã®ã¿äœ¿çšã§ããŸããã€ã³ã¹ããŒã«åŸã®ã³ãŒãã®ãžã£ã³ãã¯50åãŸã§ãèªåã«é¢ããæ å ±ã®éä¿¡åŸã®ç§»è¡ã¯50åãŸã§ã§ãã 100ã®ç§»è¡åŸãã©ã€ã»ã³ã¹ãå¿ èŠã«ãªããŸããã©ã€ã»ã³ã¹ã®è³Œå ¥æ¡ä»¶ã¯ããµã€ãã§ç¢ºèªã§ããŸãã ãã¡ããããããã®100åã®ãã©ã³ãžã·ã§ã³ã¯äœ¿çšããã®ã«ååã§ã¯ãªããããã°ã©ã ã®æåã®ç¥ãåãã«æäŸãããŸãã ã¢ãã©ã€ã¶ãŒããã詳ããç¥ãããå Žåã¯ããµããŒãã«æžã蟌ã¿ãæ°æ¥éç»é²ããŒãååŸã§ããŸãã
Wiresharkãããžã§ã¯ãã¯ã³ãã³ãã©ã€ã³ããnmakeã䜿çšããŠæ§ç¯ãããŠãããããPVS-Studioã«å«ãŸããç£èŠã·ã¹ãã ãå¿ èŠã§ãã ã³ã³ãã€ã©ã®èµ·åãç£èŠããç°å¢ã«é¢ããæ å ±ãåéããŸãïŒäœæ¥ãã£ã¬ã¯ããªãã³ãã³ãã©ã€ã³ãã³ã³ãã€ã«ããããã¡ã€ã«ãžã®ãã«ãã¹ãããã»ã¹ç°å¢å€æ°ã
ç£èŠããã«ã¯ããã¹ã¿ãŒã\ PVS-Studio \ PVS-Studioã¹ã¿ã³ãã¢ãã³ããå®è¡ããã¡ãã¥ãŒé ç®ãããŒã«\ãã¡ã€ã«ã®åæ...ããéžæãããç£èŠéå§ããã¿ã³ãã¯ãªãã¯ããŸãã 次ã«ãã³ãã³ãã©ã€ã³ãããäžèšã®ããã«ãããžã§ã¯ããnmake -f Makefile.nmake allãã®ã¢ã»ã³ããªãå®è¡ããŸãã ãç£èŠã®åæ¢ããã¿ã³ãã¯ãªãã¯ããŠãã¢ã»ã³ããªãæåããããšã確èªããç£èŠãå®äºããŸãã
ææ ¢ããŸã ãã®åŸãéç解æãèªåçã«éå§ãããŸãã å®äºåŸãã¢ã»ã³ããªããã³éç解æãæ°åå®è¡ããªãããã«ãã¬ããŒãplogãã¡ã€ã«ãä¿åããŸãã
PVS-Studio Standaloneããã°ã©ã ã®ãã®æ®µéã§ãã§ã«ããšã©ãŒã®æ€çŽ¢ãéå§ã§ããŸãã ãã ããIntelliSenseã³ãŒãã®é«åºŠãªããã²ãŒã·ã§ã³æ©èœã䜿çšããã«ã¯ãMicrosoft Visual Studioã§ã¬ããŒããéãããšããå§ãããŸãã
ãããè¡ãã«ã¯ãäžé£ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
- WiresharkãœãŒã¹ãã©ã«ããŒã«ç©ºã®Visual C ++ãããžã§ã¯ããäœæããŸãã
- ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã§ããã¡ã€ã«è¡šç€ºã¢ãŒãã«ç§»åããŸãã
- ãããžã§ã¯ãã«ãœãŒã¹ãè¿œå ããŸãã
- ãã©ã°ã€ã³ãPVS-Studio \ Open Analysis Reportãã䜿çšããŠã¬ããŒãplogãã¡ã€ã«ãéããŸãã
Wiresharkãããžã§ã¯ãã§ãšã©ãŒãèŠã€ãã
PVS-Studioã®èŠåãèŠãŠãIntelliSenseããã²ãŒã·ã§ã³ã䜿çšããŠããšã©ãŒã®æ€çŽ¢ãéå§ããŸãããã
æåãããã³ãŒãå ã®ã³ã¡ã³ãã«æ¹ãããŸããã
void decode_ex_CosNaming_NamingContext_NotFound(....) { .... (void)item; /* Avoid coverity param_set_but_unused parse warning */ .... /* coverity[returned_pointer] */ item = proto_tree_add_uint(....); .... }
ã»ãšãã©ã®å ŽåãWiresharkãããžã§ã¯ãã¯ãé«ãä¿¡é Œæ§ãå¿ èŠãšãããããžã§ã¯ãã§äœ¿çšãããéçCoverityã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ¢ã«å®æçã«ãã§ãã¯ãããŠããŸãã ãã®ãããªãããžã§ã¯ãã«ã¯ãå»çæ©åšçšãåååãã©ã³ãçšãèªç©ºçšããããŠæè¿ã§ã¯çµã¿èŸŒã¿ã·ã¹ãã çšã®ãœãããŠã§ã¢ãå«ãŸããŸãã ãããã£ãŠãã³ããªãã£ãèŠéãããšã©ãŒãèŠã€ããããšã¯èå³æ·±ãã§ãããã
PVS-Studioã®æ©èœã®å šäœåã圢æããããã«ããã¹ãäžã®æªå®çŸ©ã®åäœã®ããã«æ€åºãå°é£ãªããŸããŸãªã¿ã€ãã®ãšã©ãŒãæ¢ããŸããC/ C ++èšèªã®é«åºŠãªç¥èãå¿ èŠã§ãåã«èå³æ·±ããã®ã§ãã ãã®ããã«ã¯ã2çªç®ã®ã¬ãã«ã®æåã®å€§ãŸããªèŠåã§ååã§ãã
ã³ãŒãïŒ
typedef struct AIRPDCAP_SEC_ASSOCIATION { .... AIRPDCAP_KEY_ITEM *key; .... }; void AirPDcapWepMng(....,AIRPDCAP_KEY_ITEM* key, AIRPDCAP_SEC_ASSOCIATION *sa, ....) { .... memcpy(key, &sa->key, sizeof(AIRPDCAP_KEY_ITEM)); .... }
èŠåïŒ V512 ãmemcpyãé¢æ°ãåŒã³åºããšããïŒsa-> keyããããã¡ãŒãç¯å²å€ã«ãªããŸãã airpdcap.c 1192
C / C ++èšèªã¯ãèªã¿åãããã³æžã蟌ã¿äžã®é åã®å¢çã®çµã¿èŸŒã¿ãã§ãã¯ããªããããRAMã§å¹æçãªäœã¬ãã«ã®äœæ¥ãæäŸããŸãã ã¡ã¢ãªãããã¡ã®å å¡«ãã³ããŒãããã³æ¯èŒã®ãšã©ãŒã¯ãæªå®çŸ©ã®ããã°ã©ã ã®åäœãŸãã¯æ€åºãå°é£ãªã»ã°ã¡ã³ããŒã·ã§ã³ãšã©ãŒã«ã€ãªããå¯èœæ§ããããŸãã
ã¢ãã¬ã¹ 'key'ã«ããæ§é 'AIRPDCAP_KEY_ITEM'ãåããããã«ãããã¯äœ¿çšãããåãæ§é ãžã®ã¢ãã¬ã¹ 'sa-> key'ã§ã¯ãªãããããžã®ãã€ã³ã¿ãŒã®ã¢ãã¬ã¹ã§ãã ãã®ãšã©ãŒãä¿®æ£ããã«ã¯ãã¢ãã¬ã¹ãïŒããååŸããäžèŠãªæäœãåé€ããã ãã§ãã
ã³ãŒãïŒ
typedef struct _h323_calls_info { e_guid_t *guid; .... } h323_calls_info_t; static const e_guid_t guid_allzero = {0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }; void q931_calls_packet(....) { h323_calls_info_t *tmp2_h323info; .... memcmp(&tmp2_h323info->guid, &guid_allzero, 16) == 0; .... }
èŠåïŒ V512 ãmemcmpãé¢æ°ãåŒã³åºããšããããã¡ãŒãïŒtmp2_h323info-> guidãããªãŒããŒãããŒããŸãã voip_calls.c 1570
ãããã¡ã®äžé©åãªäœ¿çšã«é¢ããå¥ã®äŸã é¢æ° 'memcmpïŒïŒ'ã®åŒæ°ã®1ã€ã§ãæ§é äœ 'e_guid_t'ãžã®ãã€ã³ã¿ãŒãžã®ãã€ã³ã¿ãŒãããã€ã³ã¿ãŒãžã§ã¯ãªãæž¡ãããŸãã
ã³ãŒãïŒ
#define ETHERCAT_MBOX_HEADER_LEN ((int) sizeof(ETHERCAT_MBOX_HEADER)) void dissect_ecat_datagram(....) { if (len >= sizeof(ETHERCAT_MBOX_HEADER_LEN) && ....) { .... } }
èŠåïŒ V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'ïŒintïŒsizeofïŒETHERCAT_MBOX_HEADERïŒ'åŒã§ããããšã¯å¥åŠã§ãã packet-ethercat-datagram.c 519
C ++ã§ã¡ã¢ãªãæäœããå ŽåãæŒç®å 'sizeofïŒïŒ'ã䜿çšããããªããžã§ã¯ããŸãã¯ãããã¡ãŒã®ãµã€ãºããã€ãåäœã§è¿ãããŸãã ãã®å ŽåããsizeofïŒïŒãã¯ãæ§é äœãETHERCAT_MBOX_HEADERãã®ãµã€ãºã®ä»£ããã«ãã¿ã€ããintãã®ãµã€ãºããã€ãåäœã§è¿ããŸãã ãšã©ãŒãä¿®æ£ããã«ã¯ãäœåãªæäœ 'sizeofïŒïŒ'ãåé€ããŸãã
ã³ãŒãïŒ
void Proto_new(....) { .... if (!name[0] || !desc[0]) luaL_argerror(L,WSLUA_ARG_Proto_new_NAME, "must not be an empty string"); .... if ( name ) { .... loname_a = g_ascii_strdown(name, -1); .... } .... }
èŠåïŒ V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããååããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ1499ã1502 wslua_proto.c 1499
éåžžããã€ã³ã¿ãŒããªããžã§ã¯ããåç §ããŠããªãããšã瀺ãããã«ãç¹å¥ãªãã«å€ããªããžã§ã¯ãã«æžã蟌ãŸãããã€ã³ã¿ãŒã䜿çšããåã«è¿œå ã®ãã§ãã¯ãè¡ãããŸãã éçåæã«ãããã»ãã¥ãªãã£ã«éåããå¯èœæ§ã®ããæ¬ èœãããã§ãã¯ãããã³ã³ãŒããå€§å¹ ã«æ··ä¹±ãããåé·ãªãã§ãã¯ãèŠã€ããããšãã§ããŸãã
ãã€ã³ã¿ãŒãnameãã®ç¢ºèªã¯ããname [0]ãã䜿çšããåŸã«è¡ãããŸãã äžæ¹ã§ã¯ããã€ã³ã¿ãŒãnullã§ãªãå Žåããã®ãã§ãã¯ã¯åé·ã§ãããä»æ¹ã§ã¯ãnullã®å Žåããšã©ãŒãçºçããŸãã
ã³ãŒãïŒ
void create_byte_graph(....) { .... u_data->assoc=(sctp_assoc_info_t*)g_malloc( sizeof(sctp_assoc_info_t)); u_data->assoc=userdata->assoc; .... }
èŠåïŒ V519 ãu_data-> assocãå€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ1526ã1527ãsctp_byte_graph_dlg.c 1527
C / C ++ã§ã¯ãã¡ã¢ãªã®å²ãåœãŠãšå²ãåœãŠè§£é€ã¯æåã§è¡ãããŸãã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã倱æãããšãã¡ã¢ãªãªãŒã¯ãçºçããå ŽåããããŸãã
é¢æ° 'g_mallocïŒïŒ'ã¯ããµã€ãº 'sizeofïŒsctp_assoc_info_tïŒ'ãã€ãã®åçã¡ã¢ãªã®äžéšãå²ãåœãŠããããžã®ãã€ã³ã¿ãè¿ããŸãã ãã ãããã®ãã€ã³ã¿ãŒãæ ŒçŽããå€æ°ã®å€ãå€æŽããåŸã¯ããã®ã»ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ããã解æŸãããã§ããªããªããã¡ã¢ãªãªãŒã¯ãçºçããŸãã
ã³ãŒãïŒ
PacketList::PacketList(QWidget *parent) { QMenu *submenu; .... submenu = new QMenu(tr("Colorize with Filter")); /*ctx_menu_.addMenu(submenu);*/ submenu = new QMenu(tr("Copy")); ctx_menu_.addMenu(submenu); .... }
èŠåïŒ V519 ããµãã¡ãã¥ãŒãå€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªïŒ287ã363ãpacket_list.cpp 363
ãã¶ã€ããŒã¯èŠèŠçãªã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãåçã«äœæããQtãªããžã§ã¯ãéå±€ã«è¿œå ããŸãã ããã«ãããæäžäœãªããžã§ã¯ããåé€ããããšãã«ãäœæããããªããžã§ã¯ããååž°çã«ç Žæ£ã§ããŸãã ãã ããã¡ãã¥ãŒé ç®ã®1ã€ããªããžã§ã¯ãéå±€ã«è¿œå ãããŠããªããããã¡ã¢ãªãªãŒã¯ãçºçããŸãã
ã³ãŒãïŒ
void dissect_display_switch(gint offset, guint msg_len, ....) { .... if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG) !=DISPLAY_WRITE_ADDRESS_LINE_FLAG) offset+=1;msg_len-=1; .... }
èŠåïŒ V640ã³ãŒãã®æäœããžãã¯ã¯ãã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã 2çªç®ã®ã¹ããŒãã¡ã³ãã¯åžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã packet-unistim.c 1134
æ¡ä»¶æãifãã®ãããã¯ã匷調衚瀺ããäžæ¬åŒ§ã{}ãã®èª€ã£ãé 眮ã¯ããšã©ãŒã«ã€ãªããå¯èœæ§ããããŸãã
æ¡ä»¶æŒç®åãifãã®æ¬äœã¯1ã€ã®åœä»€ã§æ§æãããŸããããã©ãŒããããšããã°ã©ã ããžãã¯ã«ã¯è€æ°ã®åœä»€ãå¿ èŠã§ãã ãšã©ãŒãä¿®æ£ããã«ã¯ãããã€ãã®æ瀺ãäžæ¬åŒ§ã{}ãã§å²ãå¿ èŠããããŸãã
ã³ãŒãïŒ
void dissect_ssc_readposition (....) { .... switch (service_action) { .... case LONG_FORM: if (!(flags & MPU)) { .... } else /*offset += 16;*/ break; .... } .... }
èŠåïŒ V705 ãelseããããã¯ãå¿ããããŠããããã³ã¡ã³ãåãããŠããå¯èœæ§ããããŸãããã®ãããããã°ã©ã ã®æäœããžãã¯ãå€æŽãããŠããŸãã packet-scsi-ssc.c 831
é¢çœãã§ããã1ã€ã®ã³ã¡ã³ãã ãã§ããã°ã©ã ã®ããžãã¯ãå€æŽãããå¯èœæ§ããããŸãã ãããã¯ãcase LONG_FORMãã®çµäºã¯ããelseããããªã¬ãŒããããšãã«ã®ã¿å®è¡ãããå¿ ç¶çã«ãšã©ãŒãçºçããŸãã
ã³ãŒãïŒ
void set_has_console(gboolean set_has_console) { has_console = has_console; }
èŠåïŒ V570 ãhas_consoleãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã console_win32.c 235
äžæ³šæã«é¢é£ãããšã©ãŒããããŸãã é¢æ° 'set_has_consoleïŒïŒ'㯠'has_console'ã®å€ã 'set_has_console'ã«å€æŽããããšã«ãªã£ãŠããŸãããããã¯èµ·ãããŸããã ãšã©ãŒãä¿®æ£ããã«ã¯ããhas_consoleãå€æ°ã«ãset_has_consoleãåŒæ°ã§æž¡ãããå€ãå²ãåœãŠãå¿ èŠããããŸãã
ã³ãŒãïŒ
void dissect_dcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { client_is_le = ( (tvb_get_guint8(tvb, offset+4) | tvb_get_guint8(tvb, offset+4)) &&(tvb_get_guint8(tvb, offset+8) | tvb_get_guint8(tvb, offset+9)) && (tvb_get_guint8(tvb, offset+12) | tvb_get_guint8(tvb, offset+13)) ); }
èŠåïŒ V501 ã|ãã®å·Šãšå³ã«åäžã®ãµãåŒãtvb_get_guint8ïŒtvbããªãã»ãã+ 4ïŒãããããŸã æŒç®åã packet-dcc.c 272
åŒtvb_get_guint8ïŒtvbããªãã»ãã+ 4ïŒãç¹°ãè¿ãããŸãã é¡æšã«ãããtvb_get_guint8ïŒtvbãoffset + 5ïŒã®æžã蟌ã¿ãèšç»ããŠãããšæ³å®ã§ããŸãã
èšäºãç ©éã«ããªãããã«ãç§ãæžããŠããªãä»ã®ééãããããŸããã äžããããäŸã¯ãéç解æã®å¯èœæ§ã瀺ããPVS-Studioã«äººã ã®æ³šæãåŒãã®ã«ååãªã¯ãã§ãã PVS-Studioã®æ©èœã®å šäœåãææ¡ããå¿ èŠãããå Žåã¯ããµã€ãã§èãããããã¹ãŠã®èŠåã®ãªã¹ããèŠã€ããããšãã§ããŸãã Wiresharkã®ãã培åºçãªåæã¯ãéçºè èªèº«ãè¡ãããšãã§ããŸãã 圌ããäœããééãã§ãããã©ãããç解ããããšã¯åœŒãã«ãšã£ãŠã¯ããã«ç°¡åã§ãã
ãããã«
çãããã³ãŒãã®ã»ã¯ã·ã§ã³ã¯ããã»ã©å€ããããŸããã§ããã ãããããç§ãã¡ãã³ã¡ã³ããèŠãCoverityéçã¢ãã©ã€ã¶ãŒã®äœ¿çšã«ãããã®ã§ãã ãããã£ãŠãã³ãŒããäœæãã段éã§ãã¹ãããåã§ããšã©ãŒãæ€åºããããã«ããããžã§ã¯ãã§éçã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšããããšãå šå¡ã«æšå¥šããŸãã
ããã°ã©ãã³ã°ãæåããééããæžãããšãé¡ã£ãŠããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒAndrey Kalashnikovã PVS-Studioã«ããWiresharkã®éç解æ ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-Studioããã³CppCatããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã