ã¯ããã«
VirtualBox ïŒOracle VM VirtualBoxïŒ-ç¹å®ã®ç°å¢ã§ãªãœãŒã¹ã®ä»®æ³ã»ããã衚瀺ã§ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã®ãœãããŠã§ã¢ã 次ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãµããŒããããŠããŸãïŒMicrosoft WindowsãFreeBSDãSolaris / OpenSolarisãLinuxãMac OS XãDOSãReactOSãªã©ã
VirtualBoxã®æåã®èšäºã¯ã次ã®ãªã³ã¯ã«ãããŸãã
PVS-Studio 5.18ã䜿çšããŠèŠã€ãã£ã50以äžã®å±éºãªå Žæãå«ãŸããŠããŸãã æ°ããåæã¬ããŒãã§ã¯ããã®ãããªèŠåã¯è¡šç€ºãããŸããã§ããã éçºè ã¯èšäºãéãè¶ãããã¢ãã©ã€ã¶ãŒã®ç€ºããããã¹ãŠã®èŠåãä¿®æ£ããŸããã èå³ã®ããæ¹ã¯ããœãŒã¹ã³ãŒãã®ææ°ããŒãžã§ã³ã§ãããã®å ŽæãèŠã€ããå®éã®ãããžã§ã¯ãã§ã®PVS-StudioèŠåã®ä¿®æ£ãã©ã®ããã«èŠãããã確èªã§ããŸãã æ°ãããã§ãã¯ã®åŸãç§ã¯ä»ã®å€ãã®èå³æ·±ãã¡ãã»ãŒãžã«äŒããŸããã
ãã®èšäºã§ã¯ãéçã¢ãã©ã€ã¶ãŒïŒPVS-Studioãšã¯éããŸããïŒãå®æçã«äœ¿çšããã ãã§é«å質ã®ã³ãŒããç¶æãããããšã瀺ããããšæããŸãã ã¢ã³ãªã¢ã«ãšã³ãžã³ã³ãŒãã®ãã¹ãŠã®ã¢ãã©ã€ã¶ãŒèŠåãä¿®æ£ããçµéšãããéçºäžã®ãããžã§ã¯ãã®ãšã©ãŒæ°ã¯çµ¶ããå¢å ãã1åéãã®ãã§ãã¯ã®åŸãã³ãŒãã®å質ã¯åŸã ã«åãã«ãªããæ°ãããšã©ãŒãèç©ãããããšãããããŸããã VirtualBoxãããžã§ã¯ãã«ãåæ§ã®ç¶æ³ããããŸãã åäžã®ãã§ãã¯åŸã®ã¢ãã©ã€ã¶ãŒèŠåã®æ°ã®å¢å ã¯ã次ã®ããã«ãªããŸãã
ã¢ãã©ã€ã¶ãŒã®å®æçãªäœ¿çšã¯æ¯æ¥ã®ãã§ãã¯ãæå³ããããšã匷調ããããšãéèŠã§ãã ãã¹ã段éã§æ€åºãããå€ãã®ãšã©ãŒã¯ãã³ãŒããèšè¿°ãã段éã§æé€ã§ããŸãã
éçã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšããå¥ã®å©ç¹ã¯ãå®æçãªæŽæ°ãå©çšã§ããããšã§ãã ãã®ãããVirtualBoxã³ãŒãã®æåã®ãã§ãã¯ä»¥éã50ãè¶ ããæ°ãã蚺æã«ãŒã«ãPVS-Studioã¢ãã©ã€ã¶ãŒã«è¿œå ãããŸããã æåŸã®ã»ã¯ã·ã§ã³ã§ãæ°ãã蚺æã䜿çšããŠæ€åºããããšã©ãŒã«ã€ããŠèª¬æããŸãã
Oracle VM VirtualBoxã®ãœãŒã¹ã³ãŒãã¯ã PVS-StudioããŒãžã§ã³6.02ã䜿çšããŠæ€èšŒãããŸããã
ãããã誰ããæ€èšŒæžã¿ã®ãªããžã§ã³çªå·ãå¿ èŠãšããã§ãããïŒ
Checked out external at revision 2796. Checked out revision 59777.
é åºãªééã
èšäºãæžãåã«ãã¢ãã©ã€ã¶ãŒã䜿çšããŠä»¥åã«èŠã€ãããã®ã調ã¹ãŸããã ãããŠãæ°ããã³ãŒãã§éåžžã«ãã䌌ããšã©ãŒãèŠã€ããŸããã åã人ããã®ã³ãŒããæžããå¯èœæ§ããããŸãã
V521 ãããæŒç®åã䜿çšãããã®ãããªåŒã¯å±éºã§ãã åŒãæ£ããããšã確èªããŠãã ããã vboxmpwddm.cpp 1083
NTSTATUS DxgkDdiStartDevice(...) { .... if ( ARGUMENT_PRESENT(MiniportDeviceContext) && ARGUMENT_PRESENT(DxgkInterface) && ARGUMENT_PRESENT(DxgkStartInfo) && ARGUMENT_PRESENT(NumberOfVideoPresentSources), // <= ARGUMENT_PRESENT(NumberOfChildren) ) { .... } .... }
æåã®èšäºã«ãåæ§ã®ã³ãŒãããããŸããã ã³ã³ãæŒç®å 'ã'ãå·Šãªãã©ã³ããšå³ãªãã©ã³ãã®äž¡æ¹ãèšç®ããããšãæãåºãããŠãã ããã å®éã«ã¯ãå·ŠåŽã®ãªãã©ã³ãã®å€ã¯äœ¿çšãããªããªããæŒç®åã®çµæã¯å³åŽã®ãªãã©ã³ãã®å€ã«ãªããŸãã ã»ãšãã©ã®å Žåãä»ã®è¡ãšåæ§ã«ãããã§ã&&ãæŒç®åã䜿çšããããšèããŠããŸããã
V519 ãpThis-> aCSR [103]ãå€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ããã§ãã¯ïŒ1230ã1231ãdevpcnet.cpp 1231
static void pcnetSoftReset(PPCNETSTATE pThis) { .... pThis->aCSR[94] = 0x0000; pThis->aCSR[100] = 0x0200; pThis->aCSR[103] = 0x0105; // <= pThis->aCSR[103] = 0x0105; // <= .... }
ã³ãŒãã«éè€ããè¡ãå«ãŸããŠããŸãã éçºè ã¯ãäœåãªè¡ãåé€ããããšã«ãããæåã®èšäºã®åæ§ã®å Žæãä¿®æ£ããŸããã ãããŠããã®ãã©ã°ã¡ã³ãã«ã€ããŠã¯ã©ãã§ããããïŒé åã®ã€ã³ããã¯ã¹ã®ãšã©ãŒãŸãã¯äœåãªæååã¯ãVirtualBoxã®å°æ¥ã®ããŒãžã§ã³ã§çºèŠãããã§ãããã
V501 ã||ãã®å·Šãšå³ã«åäžã®ãµãåŒãmstrFormat.equalsIgnoreCaseïŒ "text / plain"ïŒãããããŸãã æŒç®åã vboxdnddataobject.cpp 382
STDMETHODIMP VBoxDnDDataObject::GetData(....) { .... else if( mstrFormat.equalsIgnoreCase("text/plain") // <= || mstrFormat.equalsIgnoreCase("text/html") || mstrFormat.equalsIgnoreCase("text/plain;charset=utf-8") || mstrFormat.equalsIgnoreCase("text/plain;charset=utf-16") || mstrFormat.equalsIgnoreCase("text/plain") // <= || mstrFormat.equalsIgnoreCase("text/richtext") || mstrFormat.equalsIgnoreCase("UTF8_STRING") || mstrFormat.equalsIgnoreCase("TEXT") || mstrFormat.equalsIgnoreCase("STRING")) { .... }
ã³ããŒããŒã¹ãããã°ã©ãã³ã°ã¯æ°žé ã«çãç¶ããŸãã ããã«ã¯2ã€ã®åäžã®ãããã¹ã/ãã¬ãŒã³ããã§ãã¯ãããããããã®ã³ãŒããããã¯å šäœãå¥ã®ãã¡ã€ã«ã«å®å šã«ã³ããŒãããŠããŸãã
- V501ã||ãã®å·Šãšå³ã«åäžã®ãµãåŒãïŒRTStrICmpïŒpszFormatããtext / plainãïŒãããããŸãã æŒç®åã vboxdnd.cpp 834
trueãŸãã¯falseãå®çŸ©ããŸãã //æåãããããã°ïŒ
ãã®ãããªã³ãŒãã¯åè«ã§ã¯ãªããå®éã®ãããžã§ã¯ãã«ã¯ããŸããŸãªããªãšãŒã·ã§ã³ãååšããããšãããããŸãã
V547åŒã¯åžžã«åœã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸãããdt_subr.c715
int dt_printf(dtrace_hdl_t *dtp, FILE *fp, const char *format, ...) { .... if (vsnprintf(&dtp->dt_buffered_buf[dtp->dt_buffered_offs], //<= avail, format, ap) < 0) { rval = dt_set_errno(dtp, errno); va_end(ap); return (rval); } .... }
äžèŠãããšãã¢ãã©ã€ã¶ãŒãé€ããŠãæå¥ãèšãå¿ èŠã¯ãããŸããã vsnprintfé¢æ°ã®ããã¥ã¡ã³ãã«ã¯ããšã©ãŒãçºçããå Žåã«è² ã®æ°ãè¿ãããããšãæ瀺çã«èšèŒãããŠããŸãã ãã®çµæã誀æ€ç¥ã®äŸãšããŠããã®ã³ãŒããã³ã¢C ++ã³ãŒãã¢ãã©ã€ã¶ãŒã®éçºè ã®1人ã«æž¡ããŸããã ãããããããã¢ãã©ã€ã¶ãŒãæ£ããããšãå€æããŸããã
äœåãã®ããããŒãã¡ã€ã«ã®ã©ããã«è¡ããããšèª°ãèããã§ããããã
#define vsnprintf RTStrPrintfV
ååŠçããããã¡ã€ã«ã§ã¯ããœãŒã¹ãã©ã°ã¡ã³ãã¯æ¬¡ã®ããã«å±éãããŸãã
if (RTStrPrintfV(&dtp->dt_buffered_buf[dtp->dt_buffered_offs], avail, format, ap) < 0) { rval = dt_set_errno(dtp, (*_errno())); ( ap = (va_list)0 ); return (rval); }
RTStrPrintfVïŒïŒé¢æ°ã¯ã笊å·ä»ãã® 'int'ã§ã¯ãªãã笊å·ãªãã®å 'size_t'ã®å€ãè¿ããŸãããããã£ãŠããã®ãããªãã§ãã¯ã¯è«çãšã©ãŒã«ã€ãªãããŸãã å®è³ªçã«æ€èšŒã¯è¡ãããŸããã
æ¯èŒã®ããã®é¢æ°ãããã¿ã€ãïŒ
size_t RTStrPrintfV(char *, size_t, const char *, va_list args); int vsnprintf (char *, size_t, const char *, va_list arg );
çããããFrom-Toãã³ãŒã
V570 ã from- > eval1D [i] .u1ãå€æ°ãããèªäœã«å²ãåœãŠãããŸãã state_evaluators.c 1006
void crStateEvaluatorDiff(CREvaluatorBits *e, CRbitvalue *bitID, CRContext *fromCtx, CRContext *toCtx) { .... from->eval1D[i].order = to->eval1D[i].order; from->eval1D[i].u1 = from->eval1D[i].u1; // <= from->eval1D[i].u2 = from->eval1D[i].u2; // <= ... }
ã¢ãã©ã€ã¶ãŒã¯ãçãããå€æ°ã®å²ãåœãŠãæ€åºããŸããã å€ãã®å Žåããfromãã§ã¯ãªãããtoããšããååã®ãªããžã§ã¯ããå²ãåœãŠæŒç®åã®å³åŽã§äœ¿çšããå¿ èŠããããŸãã
ãã®ãã¡ã€ã«ã«ã¯ããã«5ã€ã®å ŽæããããŸãã
- V570ãfrom-> eval1D [i] .u2ãå€æ°ãããèªäœã«å²ãåœãŠãããŸãã state_evaluators.c 1007
- V570ãfrom-> eval2D [i] .u1ãå€æ°ãããèªäœã«å²ãåœãŠãããŸãã state_evaluators.c 1042
- V570ãfrom-> eval2D [i] .u2ãå€æ°ãããèªäœã«å²ãåœãŠãããŸãã state_evaluators.c 1043
- V570ãfrom-> eval2D [i] .v1ãå€æ°ãããèªäœã«å²ãåœãŠãããŸãã state_evaluators.c 1044
- V570 'from-> eval2D [i] .v2'å€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã state_evaluators.c 1045
V625 ãforãæŒç®åã®æ€æ»ãæ€èšããŠãã ããã ã€ãã¬ãŒã¿ã®åæå€ãšæçµå€ã¯åãã§ãã state_transform.c 1365
void crStateTransformDiff(...., CRContext *fromCtx, CRContext *toCtx ) { .... for (i = to->colorStack.depth; i <= to->colorStack.depth; i++) { LOADMATRIX(to->colorStack.stack + i); from->colorStack.stack[i] = to->colorStack.stack[i]; /* Don't want to push on the current matrix */ if (i != to->colorStack.depth) diff_api.PushMatrix(); } .... }
ãtoããšãfromããšããååã䜿çšããŠã³ãŒãå ã«å¥ã®çãããå Žæããããšããäºå®ã®ãããç§ã¯ãã®ãããªãšã©ãŒãå¥ã®ã»ã¯ã·ã§ã³ã§èª¬æããããšã«ããŸããã
ãã®ã³ãŒãã§ã¯ãã«ãŒãã«ãŠã³ã¿ãŒã®åæå€ãšæçµå€ãäžèŽããŠããŸãã ãã®çµæãã«ãŒãã§ã¯1åã®å埩ã®ã¿ãå®è¡ãããŸãã ãtoããªããžã§ã¯ãã®ååã®ééãã®å¯èœæ§ããããŸãã
æäœã®åªå é äœã«ã€ããŠ
V564 ãïŒãæŒç®åã¯ããŒã«åã®å€ã«é©çšãããŸãã æ¬åŒ§ãå«ããã®ãå¿ããŠããããã&&ãæŒç®åã䜿çšããããšãæå³ããŠããå¯èœæ§ããããŸãã glsl_shader.c 4102
static void generate_texcoord_assignment(....) { DWORD map; unsigned int i; char reg_mask[6]; if (!ps) return; for (i = 0, map = ps->baseShader.reg_maps.texcoord; map && i < min(8, MAX_REG_TEXCRD); map >>= 1, ++i) { if (!map & 1) // <= continue; .... } }
æ¡ä»¶ "ïŒMapïŒ1"ã®è§ãã£ããå¿ããããŠãããããå€æ° 'map'ã®å€ã¯ãŒãã«çãããæäžäœãããã1ã«èšå®ãããŠãããã©ããããã§ãã¯ãããŸãã ãã®å Žæã®ãšã©ãŒã¯ããmapãã®å€ã®ãŒãã®ãã§ãã¯ããã«ãŒããåæ¢ããç¶æ ã§ãã§ã«ååšããŠãããšããäºå®ã«ãã£ãŠã瀺ãããŸãã ãããã£ãŠããã®æ¡ä»¶ã¯åžžã«falseã§ããã 'continue'ã¹ããŒãã¡ã³ãã¯å®è¡ãããŸããã
ã»ãšãã©ã®å Žåãæ¡ä»¶ã¯æ¬¡ã®ããã«èšè¿°ããå¿ èŠããããŸãã
if ( !(map & 1) ) continue;
V590ãã®è¡šçŸã調ã¹ãããšãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã vboxdispcm.cpp 288
HRESULT vboxDispCmSessionCmdGet(....) { .... Assert(hr == S_OK || hr == S_FALSE); if (hr == S_OK || hr != S_FALSE) // <= { return hr; } .... }
ã¢ãã©ã€ã¶ãŒã¯ãéšååŒãhr == S_OKããæ¡ä»¶å šäœã®çµæã«åœ±é¿ããªãçãããæ¡ä»¶ãæ€åºããŸããã
ãã®æ¡ä»¶åŒã®ççå€è¡šãèŠããšãããã確èªã§ããŸãã
ã¡ãªã¿ã«ããã®æ¡ä»¶ã®æ¬¡ã«çãããAssertïŒïŒããããããã«ã¯ä¿®æ£ãããæ¡ä»¶åŒããããŸãã
äžè¬ã«ããã®ã¿ã€ãã®ãšã©ãŒã¯éåžžã«äžè¬çãªçºçã§ãã ããšãã°ãFreeBSDã«ãŒãã«ãäŸå€ã§ã¯ãããŸããã§ããã
VirtualBoxã®äžå¯©ãªå Žæã®å šãªã¹ãïŒ
- V590 'err == 0Lã®æ€æ»ãæ€èšãã|| errïŒ= 1237L 'åŒã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã vboxdisplay.cpp 656
- V590ãrc == 3209 || rcïŒ=ïŒ-3210ïŒ 'åŒã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã vd.cpp 10876
- V590ãrc == 3209 || rcïŒ=ïŒ-3210ïŒ 'åŒã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã vd.cpp 10947
- V590ãrc == 3209 || rcïŒ=ïŒ-3210ïŒ 'åŒã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã vd.cpp 11004
- V590ãrc == 3209 || rcïŒ=ïŒ-3210ïŒ 'åŒã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã vd.cpp 11060
ãã®ä»ã®èŠå
V511 sizeofïŒïŒæŒç®åã¯ãé åã®ãµã€ãºã§ã¯ãªãããã€ã³ã¿ãŒã®ãµã€ãºããsizeofïŒplaneïŒãåŒã§è¿ããŸãã devvga-svga3d-win.cpp 4650
int vmsvga3dSetClipPlane(...., float plane[4]) // <= { .... /* Store for vm state save/restore. */ pContext->state.aClipPlane[index].fValid = true; memcpy(pContext->state.aClipPlane[....], plane, sizeof(plane)); .... }
å€æ° 'plane'ã¯ã 'float'åã®é åãžã®åãªããã€ã³ã¿ãŒã§ãã ãsizeofïŒplaneïŒãã®å€ã¯ãããã°ã©ã ã®å®¹éã«å¿ããŠ4ãŸãã¯8ã«ãªããŸãã ãŸããé¢æ°ãã©ã¡ãŒã¿ãŒã®æ°åã[4]ãã¯ããfloatãåã®4ã€ã®èŠçŽ ã®é åãé¢æ°ã«æž¡ãããããšãããã°ã©ããŒã«äŒããã ãã§ãã ãããã£ãŠãmemcpyïŒïŒé¢æ°ã¯ééã£ããã€ãæ°ãã³ããŒããŸãã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ411ã418ãmp-r0drv-nt.cpp 411
static int rtMpCallUsingDpcs(....) { .... if (enmCpuid == RT_NT_CPUID_SPECIFIC) // <= { KeInitializeDpc(&paExecCpuDpcs[0], rtmpNtDPCWrapper, pArgs); KeSetImportanceDpc(&paExecCpuDpcs[0], HighImportance); KeSetTargetProcessorDpc(&paExecCpuDpcs[0], (int)idCpu); pArgs->idCpu = idCpu; } else if (enmCpuid == RT_NT_CPUID_SPECIFIC) // <= { KeInitializeDpc(&paExecCpuDpcs[0], rtmpNtDPCWrapper, pArgs); KeSetImportanceDpc(&paExecCpuDpcs[0], HighImportance); KeSetTargetProcessorDpc(&paExecCpuDpcs[0], (int)idCpu); pArgs->idCpu = idCpu; KeInitializeDpc(&paExecCpuDpcs[1], rtmpNtDPCWrapper, pArgs); KeSetImportanceDpc(&paExecCpuDpcs[1], HighImportance); KeSetTargetProcessorDpc(&paExecCpuDpcs[1], (int)idCpu2); pArgs->idCpu2 = idCpu2; } .... }
æ¡ä»¶ã®ã«ã¹ã±ãŒãå ã®åŒã¯åäžã§ããããã2çªç®ã®æ¡ä»¶ã«ããã³ãŒãã®éšåã¯å¶åŸ¡ãããŸããã
V531 sizeofïŒïŒæŒç®åã«sizeofïŒïŒãæããããšã¯å¥åŠã§ãã tstrtfileaio.cpp 61
void tstFileAioTestReadWriteBasic(...., uint32_t cMaxReqsInFlight) { /* Allocate request array. */ RTFILEAIOREQ *paReqs; paReqs = (...., cMaxReqsInFlight * sizeof(RTFILEAIOREQ)); RTTESTI_CHECK_RETV(paReqs); RT_BZERO(..., sizeof(cMaxReqsInFlight) * sizeof(RTFILEAIOREQ)); /* Allocate array holding pointer to data buffers. */ void **papvBuf = (...., cMaxReqsInFlight * sizeof(void *)); .... }
ã¢ãã©ã€ã¶ãŒã¯ã2ã€ã®sizeofïŒïŒã¹ããŒãã¡ã³ãã®çããã補åãæ€åºããŸããã ãã¯ããRT_BZEROããèŠããšãããªããuint32_tãåã®å€æ°ã®ãµã€ãºãååŸããå¥ã®åã®ãµã€ãºãæããã®ãããšããçåãçããŸãã ã³ãŒãã®é£æ¥ããã»ã¯ã·ã§ã³ã§ã¯ãé åã®ãµã€ãºã¯ãcMaxReqsInFlight * sizeofïŒRTFILEAIOREQïŒããšããŠèšç®ãããŸãã ã»ãšãã©ã®å ŽåããRT_BZEROãã®è¡ã¯åããµã€ãºã䜿çšããå¿ èŠããããŸããã誀ã£ãŠééããŸããã
V547åŒ 'sd> = 0'ã¯åžžã«çã§ãã 笊å·ãªãã®åã®å€ã¯åžžã«0以äžã§ããvboxservicevminfo.cpp1086
static int vgsvcVMInfoWriteNetwork(void) { .... SOCKET sd = WSASocket(AF_INET, SOCK_DGRAM, 0, 0, 0, 0); .... if (pAdpInfo) RTMemFree(pAdpInfo); if (sd >= 0) // <= closesocket(sd); .... }
SOCKETåïŒVisual C ++ïŒã¯ç¬Šå·ãªãã§ãã®ã§ããsd> = 0ãã®ãã§ãã¯ã¯ç¡æå³ã§ãã ãã®ã³ãŒãã®çç±ã¯ç解ã§ããŸãããããžã§ã¯ãã¯ããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã«æ§ç¯ãããŠãããUnixã·ã¹ãã ã§ã¯ãœã±ããå€ã¯ç¬Šå·ä»ãå€æ°ãintãã«æ ŒçŽãããŸãã äžè¬ã«ããœã±ãããæäœããããã®ã³ãŒãã¯æ£ããèšè¿°ãããŠããŸããã©ãã§ãç¶æ ããã§ãã¯ããããã«ãã·ã¹ãã ããããŒãã¡ã€ã«ã®å®æ°ã䜿çšãããŸãã ããããã¯ãã¹ãã©ãããã©ãŒã ã³ãŒãã«ã¯å€ãã®æ¡ä»¶ä»ãããªããã»ããµãã£ã¬ã¯ãã£ããå«ãŸããŠãããããããå Žæã§ã¯ãã§ãã¯ã«æ°ä»ãããããã¯åžžã«Windowsã«åœãŠã¯ãŸããŸãã
V560æ¡ä»¶åŒã®äžéšã¯åžžã«çã§ãïŒ0x1fbeã tstiprtministring.cpp 442
static void test2(RTTEST hTest) { .... for (RTUNICP uc = 1; uc <= 0x10fffd; uc++) { if (uc == 0x131 || uc == 0x130 || uc == 0x17f || 0x1fbe)// <= continue; //^^^^^^ if (RTUniCpIsLower(uc)) { RTTESTI_CHECK_MSG(....), ("%#x\n", uc)); strLower.appendCodePoint(uc); } if (RTUniCpIsUpper(uc)) { RTTESTI_CHECK_MSG(....), ("%#x\n", uc)); strUpper.appendCodePoint(uc); } } .... }
éåžžãèšäºã¯ãã¹ãçšã®ãã¡ã€ã«ã«å¯ŸããŠçºè¡ãããèŠåãåãåããŸããã PVS-Studioã¬ããŒããããæå®ããããã£ã¬ã¯ããªå ã®ãã¹ãŠã®ãã¡ã€ã«ã«çºè¡ãããã¡ãã»ãŒãžãç°¡åã«é€å€ã§ããŸãã ããããç§ã¯1ã€ã®äŸãæžãããšã«æ±ºããŸããã ã¿ã€ããã¹ã®ããããã¹ãã¯äœããã§ãã¯ããŸããã forïŒïŒã«ãŒãã®åå埩ã§ã 'continue'ã¹ããŒãã¡ã³ããå®è¡ãããŸãã æ¡ä»¶ã§ã¯åŒãuc ==ããçç¥ãããŠãããããå€ã0x1fbeãã®ã¿ãåžžã«trueã«ãªããŸãã ããã¯ã éçåæãåäœãã¹ããè£å®ããæ¹æ³ã®è¯ãäŸã§ãã
æ£ãããªãã·ã§ã³ïŒ
if (uc == 0x131 || uc == 0x130 || uc == 0x17f || uc == 0x1fbe) continue;
V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã 'ïŒ-2ïŒ'ã¯è² ã§ãã translate.c 2708
static void gen_push_T1(DisasContext *s) { .... if (s->ss32 && !s->addseg) gen_op_mov_reg_A0(1, R_ESP); else gen_stack_update(s, (-2) << s->dflag); .... }
ææ°ã®Cããã³C ++èšèªæšæºã«ããã°ãè² ã®æ°ãã·ãããããšæªå®çŸ©ã®åäœãçºçããŸãã
以äžã«2ã€ã®é¡äŒŒããå Žæã瀺ããŸãã
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ãã¯è² ã§ãïŒ 'i64' = [-1..0]ïŒã tarvfs.cpp 234
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-16'ã¯è² ã§ãã translate.c 2761
ããã·ã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã state_evaluators.c 479
static void map2(G....) { .... if (g->extensions.NV_vertex_program) { /* XXX FIXME */ i = target - GL_MAP2_COLOR_4; } else { i = target - GL_MAP2_COLOR_4; } .... }
ãFIXMEãããã³ãTODOãã¿ã°ã¯ããœãŒã¹ã³ãŒãå ã§éåžžã«é·ãæé䜿çšã§ããŸãã ããããéçã¢ãã©ã€ã¶ãŒã¯ãäžå®å šãªã³ãŒããå¿ããããŸããã
V530é¢æ° 'e1kHandleRxPacket'ã®æ»ãå€ãå©çšããå¿ èŠããããŸãã deve1000.cpp 3913
static void e1kTransmitFrame(PE1KSTATE pThis, bool fOnWorkerThread) { .... /** @todo do we actually need to check that we're in loopback mode here? */ if (GET_BITS(RCTL, LBM) == RCTL_LBM_TCVR) { E1KRXDST status; RT_ZERO(status); status.fPIF = true; e1kHandleRxPacket(pThis, pSg->aSegs[0].pvSeg, ....); // <= rc = VINF_SUCCESS; // <= } e1kXmitFreeBuf(pThis); .... }
ãœãŒã¹ã³ãŒãã®ä»ã®éšåã§ã¯ãe1kHandleRxPacketïŒïŒé¢æ°ã®çµæã¯éåžžãå€æ°ãrcãã«æ ŒçŽãããŸãã ãã ããã³ãŒããè¿œå ããããŸã§ãé¢æ°ã®çµæã¯ããã§ã¯äœ¿çšãããããVINF_SUCCESSãã¯åžžã«ã¹ããŒã¿ã¹ã«ä¿åãããŸãã
æ°ãã蚺æ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãVirtualBoxãããžã§ã¯ãã®ååã®ãã§ãã¯åŸã«PVS-Studioã«è¡šç€ºãããã¢ãã©ã€ã¶ãŒã®èŠåã«ã€ããŠèª¬æããŸãã
V745 ãwchar_t *ãã¿ã€ãã®æååããBSTRãã¿ã€ãã®æååã«èª€ã£ãŠå€æãããŸãã ãSysAllocStringãé¢æ°ã®äœ¿çšãæ€èšããŠãã ããã vboxcredentialprovider.cpp 231
static HRESULT VBoxCredentialProviderRegisterSENS(void) { .... hr = pIEventSubscription->put_EventClassID( L"{d5978630-5b9f-11d1-8dd2-00aa004abd5e}"); .... }
ã¢ãã©ã€ã¶ãŒã¯ãã¿ã€ããwchar_t *ãã®ã¹ããªã³ã°ã§ãã¿ã€ãBSTRã®ã¹ããªã³ã°ãšåæ§ã«æ©èœãå§ããããšãçºèŠããŸããã
BSTRïŒåºæ¬æååãŸãã¯ãã€ããªæååïŒã¯ãCOMããªãŒãã¡ãŒã·ã§ã³ãããã³çžäºéçšæ©èœã§äœ¿çšãããæååããŒã¿åã§ãã ãã®ã¿ã€ãã®æååã¯ã4ãã€ãã®é·ãã®ãã¬ãã£ãã¯ã¹ãããŒã¿æååãããã³2ã€ã®ãã«æåã®åºåãæåã§æ§æãããŸãã é·ãã®æ¥é èŸã¯ãæååã®æåã®æåã®çŽåã«ç€ºãããå¶éæåã¯èæ ®ãããŸããã ããã䜿çšãããšãããŒã¿è¡ã®å é ã®åã«é·ãã®æ¥é èŸããªããªããŸãã
SysAllocStringïŒïŒé¢æ°ã䜿çšããŠä¿®æ£ããããªãã·ã§ã³ïŒ
static HRESULT VBoxCredentialProviderRegisterSENS(void) { .... hr = pIEventSubscription->put_EventClassID(SysAllocString( L"{d5978630-5b9f-11d1-8dd2-00aa004abd5e}")); .... }
ããã«ããã€ãã®çãããå ŽæïŒ
- V745ãwchar_t *ãã¿ã€ãã®æååããBSTRãã¿ã€ãã®æååã«èª€ã£ãŠå€æãããŸãã ãSysAllocStringãé¢æ°ã®äœ¿çšãæ€èšããŠãã ããã vboxcredentialprovider.cpp 277
- V745ãwchar_t *ãã¿ã€ãã®æååããBSTRãã¿ã€ãã®æååã«èª€ã£ãŠå€æãããŸãã ãSysAllocStringãé¢æ°ã®äœ¿çšãæ€èšããŠãã ããã vboxcredentialprovider.cpp 344
- V745ãwchar_t *ãã¿ã€ãã®æååããBSTRãã¿ã€ãã®æååã«èª€ã£ãŠå€æãããŸãã ãSysAllocStringãé¢æ°ã®äœ¿çšãæ€èšããŠãã ããã string.cpp 31
V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã extpackutil.cpp 257
RTCString *VBoxExtPackLoadDesc(....) { .... xml::XmlFileParser Parser; try { Parser.read(szFilePath, Doc); } catch (xml::XmlError Err) // <= { return new RTCString(Err.what()); } .... }
ã¢ãã©ã€ã¶ãŒã¯ãå€ã«ããäŸå€ã®ãã£ããã«é¢é£ããæœåšçãªãšã©ãŒãæ€åºããŸããã ããã¯ãã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠãã¿ã€ãxml :: XmlErrorã®æ°ãããErrããªããžã§ã¯ããäœæãããããšãæå³ããŸãã ããã«ãããxml :: XmlErrorããç¶æ¿ããã¯ã©ã¹ã«ä¿åãããäŸå€æ å ±ã®äžéšã倱ãããŸãã
å¥ã®äžå¯©ãªå ŽæïŒ
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã extpackutil.cpp 330
ãããã«
VirtualBoxãããžã§ã¯ãã¯ãéçºãããžã§ã¯ãã§éç解æãå®æçã«é©çšããããšãããã«éèŠã§ãããã®è¯ãäŸã§ãã ã¢ãã©ã€ã¶ãŒã䜿çšãããã®ã·ããªãªã¯ãéçºããã»ã¹äžã®æœåšçãªãšã©ãŒã®å¢å€§ãé²ãã䜿çšããåæããŒã«ã®ææ°ã®æŽæ°ãåãåãããšãã§ããŸãã
ãŸãããã®èšäºã®å·çäžã«7ã10åéæ°åãã³ã°ããããã»ããµãå®å šã«ããŒãããMS Wordã³ãŒãã確èªããŠããã ããã°å¹žãã§ãã ãããããã®ãããªå¯èœæ§ã¯ãŸã ãããŸããã ãã¡ããã MS Word 1.1aã䜿çšããŠèå€åŠèª¿æ»ãå®æœããŸããããããã¯ãŸã£ãããããŸãã...
PVS-Studioãç°¡åã«ããŠã³ããŒãããŠããããžã§ã¯ãã®ãšã©ãŒãèŠã€ããŠãã ããã 補åã®ãŠãŒã¶ãŒã«ã€ããŠèããããã°ã©ããŒã®æéãç¯çŽããŠãã ããïŒ
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã Oracle VM VirtualBoxã«å¯Ÿããæ°ããç® ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã