
ããã¯ãHaikuãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã§ãã¯ã«é¢ããæçµèšäºã§ãã æåã®èšäºã§ã¯ãããŸããŸãªã¿ã€ãã®èšºæã§çºçããå¯èœæ§ã®ãããšã©ãŒãåéãããŸããããäœããã®æ¹æ³ã§ç¶æ ã®æ€èšŒã«é¢é£ããŠããŸããã ãã®èšäºã§ã¯ãåæãããæ®ãã®ã¢ãã©ã€ã¶ãŒèŠåã«ã€ããŠèª¬æããŸãã åéãããäŸã¯ãããã€ãã®ã°ã«ãŒãã«åããããŸãã
Haikuã¯ãBeOSãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã®ãã€ããªäºææ§ã察象ãšããç¡æã®ããŒãœãã«ã³ã³ãã¥ãŒã¿ãŒãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãã Haikuã¯BeOSã®ã³ã¢ã¢ã€ãã¢ãäœçŸããŠããŸãã ããã¯ããã€ããªããã³ã¢ãšããŠã¢ãŒããã¯ãã£çã«èšèšãããã¢ãžã¥ã©ãŒã·ã¹ãã ã§ããå¿ èŠãªã¢ãžã¥ãŒã«ãåçã«ããŒãã§ãããã€ã¯ãã«ãŒãã«ã¢ãŒããã¯ãã£ã§ãã
ãããžã§ã¯ãã¯ã PVS-Studio 5.24ã䜿çšããŠHaikuãŠãŒã¶ãŒã³ãã¥ããã£ã®ãªã¯ãšã¹ãã§ãã¹ããããŸããã
æååãæäœãã
V527 ã\ 0ãå€ããcharãåãã€ã³ã¿ãŒã«å²ãåœãŠãããã®ã¯å¥åŠã§ãã ããããæå³ïŒ* scratchPtr = '\ 0'ã TextGapBuffer.cpp 228
const char* TextGapBuffer::Text() { const char* realText = RealText(); if (fPasswordMode) { .... char* scratchPtr = fScratchBuffer; for (uint32 i = 0; i < numChars; i++) { memcpy(scratchPtr, B_UTF8_BULLET, bulletCharLen); scratchPtr += bulletCharLen; } scratchPtr = '\0'; //<== return fScratchBuffer; } return realText; }
æãå¯èœæ§ãé«ãã®ã¯ãæååãæäœããåŸããã€ã³ã¿ãŒããªã»ããããã«ãæååã®æ«å°Ÿã«çµç«¯ãŒããæžã蟌ãããšã§ããã æ£ãããªãã·ã§ã³ã¯ã* scratchPtr = '\ 0';ãã§ãã
V692æååã«ãã«æåãè¿œå ããããšããäžé©åãªè©Šã¿ã 'strlen'é¢æ°ã«ãã£ãŠæååã®é·ããæ£ããå€æããã«ã¯ãæåã«ãã«ã¿ãŒãããŒã¿ã§çµããæååã䜿çšããå¿ èŠããããŸãã PoorManWindow.cpp 254
void PoorManWindow::MessageReceived(BMessage* message) { .... if (inet_ntop(AF_INET, &sin_addr, addr, sizeof(addr)) != NULL){ addr[strlen(addr)] = '\0'; //<== line << '(' << addr << ") "; } .... }
è¡æ«ã«ç«¯æ«ãŒããæžã蟌ãããã«ãstrlenïŒïŒé¢æ°ã䜿çšããŸããããstrlenïŒïŒé¢æ°ãæ©èœããããã«è¡ã¯ç«¯æ«ãŒãã§çµäºããããããã®ã¢ã¯ã·ã§ã³ã®çµæã¯äºæž¬ã§ããŸããã 0ãèŠã€ãã£ãã»ã«ã ãã«ãŒããæžã蟌ãŸãããšåæã«ãstrlenïŒïŒé¢æ°ããããã¡ãã¯ããã«è¶ ããŠããŸããããã°ã©ã ã®åäœãæªå®çŸ©ã«ãªãå¯èœæ§ããããŸãã ã³ãŒããä¿®æ£ããã«ã¯ãä»ã®æ¹æ³ã§æååã®é·ããèšç®ããå¿ èŠããããŸãã
æªããµã€ã¯ã«
V529å¥æ°ã»ãã³ãã³ ';' ãforãæŒç®åã®åŸã ringqueue.cpp 39
int compute_order(unsigned long size) { int order; unsigned long tmp; for (order = 0, tmp = size; tmp >>= 1; ++order); //<== if (size & ~(1 << order)) ++order; return order; }
ãã®é¢æ°ã«ã¯äœãåé¡ããããŸããæåŸã«ã»ãã³ãã³ããããããããã£ã®ãªãã«ãŒãã ã³ãŒãã®ãã©ãŒãããã¯ãæ¡ä»¶ãã«ãŒãã®æ¬äœã«ããããšã瀺ããŸãã äžæ¹ãå€æ°ãtmpãã¯ãŸã ã©ãã§ã䜿çšãããŸããã
ãã¶ãã圌ãã¯ããããããã£ãã§ãïŒ
int compute_order(unsigned long size) { int order; unsigned long tmp; for (order = 0, tmp = size; tmp >>= 1; ++order) if (tmp & ~(1 << order)) ++order; return order; }
ãã ããæ¬äœã®forïŒ;;ïŒã«ãŒãã«ãŠã³ã¿ãŒãå€æŽããã®ã¯ããŸãè¯ãã¹ã¿ã€ã«ã§ã¯ãããŸããã
V535å€æ° 'k'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸãã è¡ã確èªããŠãã ããïŒ3598ã3610ãrules.c 3610
void solver_get_unneeded(Solver *solv, Queue *unneededq, int filtered) { .... if (dep_possible(solv, *dp, &installedm)) { Queue iq; Id iqbuf[16]; queue_init_buffer(&iq, iqbuf, sizeof(iqbuf)/sizeof(*iqbuf)); dep_pkgcheck(solv, *dp, 0, &iq); for (k = 0; k < iq.count; k++) //<== { Id p = iq.elements[k]; Solvable *sp = pool->solvables + p; if (....) continue; for (j = 0; j < count; j++) if (p == unneededq->elements[j]) break; /* now add edge from j + 1 to i + 1 */ queue_insert(....); /* addapt following edge pointers */ for (k = j + 2; k < count + 2; k++) //<== edges.elements[k]++; } queue_free(&iq); } .... }
ã³ãŒãã®ãã©ãŒããããéåžžã«æªãããããšã©ãŒãããå Žåã¯ããã®ããã«ééããªãäœæãããŠããŸãã ãã¹ããããforïŒ;;ïŒã«ãŒãã§1ã€ã®ã«ãŠã³ã¿ãŒã䜿çšããã®ã¯æªãã¹ã¿ã€ã«ã§ãã
åæ§ã®å ŽæïŒ
- V535å€æ° 'i'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸãã è¡ã確èªïŒ2319ã2349ãsolver.c 2349
V634 ã*ãæäœã®åªå é äœã¯ãã<<ãæäœã®åªå é äœãããé«ããªã£ãŠããŸãã åŒã§æ¬åŒ§ã䜿çšããå¿ èŠãããå ŽåããããŸãã RAW.cpp 1141
void DCRaw::_WaveletDenoise() { .... for (i = 0; i < (1 << dim * 2); i++) { //<== if (fimg[i] < -fThreshold) fimg[i] += fThreshold; else if (fimg[i] > fThreshold) fimg[i] -= fThreshold; else fimg[i] = 0; } .... }
ä¹ç®ã®æŒç®ã¯ãã·ããã®æŒç®ãããåªå 床ãé«ããªããŸãã ããã§ã©ã®ããã«èšç»ããããã¯äžæã§ãããããèŠçãæ確ã«ããããã«æ¬åŒ§ã䜿çšããŠæäœã®é åºã確èªããã³æ±ºå®ããå¿ èŠããããŸãã
åæ§ã®å ŽæïŒ
- V634ã*ãæäœã®åªå é äœã¯ãã<<ãæäœã®åªå é äœãããé«ããªã£ãŠããŸãã åŒã§æ¬åŒ§ã䜿çšããå¿ èŠãããå ŽåããããŸãã RAW.cpp 1099
V696 ãcontinueãæŒç®åã¯ãæ¡ä»¶ãåžžã«falseã§ããããããdo {...} whileïŒFALSEïŒãã«ãŒããçµäºããŸãã è¡ã確èªããŠãã ããïŒ1939ã1945ãRoster.cpp 1939
status_t BRoster::_LaunchApp(....) const { .... do { // find the app .... if (appType.InitCheck() == B_OK && appType.GetAppHint(&hintRef) == B_OK && appRef == hintRef) { appType.SetAppHint(NULL); // try again continue; } ... } while (false); .... }
ãdo {...} whileïŒ...ïŒãã«ãŒãã®ãcontinueãã¹ããŒãã¡ã³ãã¯ãã«ãŒããåæ¢ããæ¡ä»¶ã®èšç®ã«ç§»è¡ãããããåžžã«falseã§ããæ¬è³ªçã«ãããã¯ã«ãŒãããã®ç¡æ¡ä»¶ã®çµäºã§ããããtry againããšããã³ã¡ã³ãã¯èª€è§£ãæãã ãã§ãã
V706çãããåºåïŒsizeofïŒkBaudratesïŒ/ sizeofïŒchar *ïŒã 'kBaudrates'é åã®ãã¹ãŠã®èŠçŽ ã®ãµã€ãºãé€æ°ã«çãããããŸããã SerialWindow.cpp 162
const int SerialWindow::kBaudrates[] = { 50, 75, 110, .... }; SerialWindow::SerialWindow() : .... { .... for(int i = sizeof(kBaudrates) / sizeof(char*); --i >= 0;)//<== { message = new BMessage(kMsgSettings); message->AddInt32("baudrate", kBaudrateConstants[i]); char buffer[7]; sprintf(buffer, "%d", kBaudrates[i]); //<== BMenuItem* item = new BMenuItem(buffer, message); fBaudrateMenu->AddItem(item); } .... }
é å 'kBaudrates'ã®èŠçŽ æ°ãååŸããã«ã¯ãäœããã®çç±ã§ããã®ãµã€ãºããã€ã³ã¿ãŒã®ãµã€ãºã§é€ç®ããŸããæçµçã«ãé åå šäœã32ãããã·ã¹ãã ã§ã€ã³ããã¯ã¹ä»ãããã64ãããã·ã¹ãã ã§ã¯ååã®ã¿ãã€ã³ããã¯ã¹ä»ããããŸãã
é å
V548åãã£ã¹ãã®æ€èšãæ€èšããŠãã ããã TYPE ** Xãšåçã§ã¯ãªãTYPE X [] [] RAW.cpp 1668
void DCRaw::_AdobeCoefficients(const char *make, const char *model) { static const struct { const char *prefix; short black, trans[12]; } table[] = { { "Canon EOS D2000", 0, { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 }}, { "Canon EOS D6000", 0, { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 }}, .... }; double cameraXYZ[4][3]; for (uint32 i = 0; i < sizeof table / sizeof *table; i++) { if (!strncasecmp(model, table[i].prefix, strlen(....))) { if (table[i].black) fMeta.black = table[i].black; for (uint32 j = 0; j < 12; j++) { ((double**)cameraXYZ)[0][j] = table[i].trans[j] /10000.0; } _CameraXYZCoefficients(cameraXYZ); break; } } }
ãdouble cameraXYZ [4] [3]ããšããŠå®£èšãããé åãcameraXYZãã¯ãã¿ã€ããdouble **ãã«ãã£ã¹ããããŸãã ãã®åãã£ã¹ãã¯ããããæå³ããªãããšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã
ã¿ã€ããã¿ã€ã[a] [b]ãããã³ãã¿ã€ã**ãã¯ãç°ãªãããŒã¿æ§é ãè¡šããŸãã ã¿ã€ã[a] [b]ã¯ã2次å é åãšããŠäœ¿çšã§ããåäžã®ã¡ã¢ãªã§ãã ã¿ã€ã**ã¯ãã¡ã¢ãªã®ããã€ãã®ã»ã¯ã·ã§ã³ãžã®ãã€ã³ã¿ãŒã®é åã§ãã
V554 auto_ptrã®èª€ã£ã䜿çšã ãnew []ãã§å²ãåœãŠãããã¡ã¢ãªã¯ããdeleteãã䜿çšããŠæ¶å»ãããŸãã DefaultCatalog.cpp 208
status_t DefaultCatalog::ReadFromFile(const char *path) { .... auto_ptr<char> buf(new(std::nothrow) char [sz]); .... }
ã¢ãã©ã€ã¶ãŒã¯ãã¹ããŒããã€ã³ã¿ãŒã䜿çšãããšæªå®çŸ©ã®åäœãçºçããå¯èœæ§ãããç¶æ³ãæ€åºããŸããã ã¯ã©ã¹ãauto_ptrãã¯é åã§åäœããããã«ã¯èšèšãããŠããŸãã;æŒç®åãdeleteãã䜿çšããŠã¡ã¢ãªã解æŸããŸãããdelete []ããæå®ãããšãã³ãŒãã¯ã³ã³ãã€ã«ãããŸããã
æ£ããã³ãŒãäŸïŒ
status_t DefaultCatalog::ReadFromFile(const char *path) { .... unique_ptr<char[]> buf(new(std::nothrow) char[sz]); .... }
ãã®ãããªå¥ã®å ŽæïŒ
- V554 auto_ptrã®èª€ã£ã䜿çšã ãnew []ãã§å²ãåœãŠãããã¡ã¢ãªã¯ããdeleteãã䜿çšããŠæ¶å»ãããŸãã DefaultCatalog.cpp 249
V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ã8ãã€ã³ããã¯ã¹ã¯ãé åã®å¢çãè¶ ããŠããŸãã floppy_ctrl.c 637
V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ã9ãã€ã³ããã¯ã¹ã¯é åã®å¢çãè¶ ããŠããŸãã floppy_ctrl.c 638
typedef struct floppy { .... uint8 result[8]; /* status of the last finished command */ .... }; void floppy_dump_reg(floppy_t *flp) { .... //uint8 result[10]; //<== This was correct! uint8 *result = flp->result; //<== Bad fix! :) .... dprintf(FLO "gap=%d wg=%d eis=%d fifo=%d poll=%d thresh=%d pretrk=%d\n", (result[7] & 0x02) >> 1, result[7] & 0x01, (result[8] & 0x40) >> 6, (result[8] & 0x20) >> 5, (result[8] & 0x10) >> 4, result[8] & 0x0f, result[9]); .... }
2ã€ã®ã¢ãã©ã€ã¶ãŒèŠåã¯ãé åã®ãªãŒããŒãããŒã瀺ããŸãã ã³ã¡ã³ãã¢ãŠããããã³ãŒãããå€æãããšãé å 'result []'ã10åã®èŠçŽ ã§æ§æãããç·šéåŸã¯8åã®èŠçŽ ã«ãªããŸããã åæã«ãã³ãŒãã¯0ã9ã®ã€ã³ããã¯ã¹ãæã€é åã®10åã®èŠçŽ ã«ã¢ã¯ã»ã¹ããŸãã
å€æ°å
V672ããã§æ°ããããã¹ãå€æ°ãââäœæããå¿ èŠã¯ãããããªãã§ãããã é¢æ°ã®åŒæ°ã®1ã€ãåãååãæã¡ããã®åŒæ°ã¯åç §ã§ãã è¡ã確èªããŠãã ããïŒ348ã429ãtranslate.cpp 429
status_t Translator::FindPath(const translation_format *format, BPositionIO &stream, TypeList &typesSeen, TypeList &path, ....) { .... TypeList path; double quality; if (FindPath(...) == B_OK) { if (bestQuality < quality * formatQuality) { bestQuality = quality * formatQuality; bestPath.SetTo(path); bestPath.Add(formats[j].type); status = B_OK; } } .... }
ããŒã«ã«å€æ°ããã¹ãã®ååãšé¢æ°ã®ãã©ã¡ãŒã¿ãŒïŒç¹ã«ãã®å Žåã®ããã«ãªã³ã¯ïŒãäžèŽãããšããã®å€æ°ã®ããŒã«ã«å€æŽã倱ãããããä»ã®è«çãšã©ãŒãçºçãããããå¯èœæ§ããããŸãã
V711ãã®ã«ãŒããå¶åŸ¡ããå€æ°ãšåãååã®ã«ãŒãå ã«ããŒã«ã«å€æ°ãäœæããããšã¯å±éºã§ãã ipv4.cpp 514
static int dump_ipv4_multicast(int argc, char** argv) { MulticastState::Iterator it = sMulticastState->GetIterator(); while (it.HasNext()) { .... int count = 0; IPv4GroupInterface::AddressSet::Iterator it = state->Sources().GetIterator(); while (it.HasNext()) { .... } kprintf("}> sock %p\n", state->Parent()->Socket()); } return 0; }
ã«ãŒãã®å¶åŸ¡ã«äœ¿çšãããå€æ°ã«äžèŽããå€æ° 'it'ã®å®£èšãã«ãŒãã®æ¬æã§èŠã€ãããŸããã ãã®ãããªã³ãŒãã«ã¯ãæ°žé ã®ãµã€ã¯ã«ãåãåããŸã§ã®è«çãšã©ãŒãå«ãŸããå ŽåããããŸãã
ã¡ã¢ãªãæäœãã
V597ã³ã³ãã€ã©ãŒã¯ãããã¹ã¯ãŒãããããã¡ãŒã®ãã©ãã·ã¥ã«äœ¿çšããããmemsetãé¢æ°åŒã³åºããåé€ã§ããŸããã RtlSecureZeroMemoryïŒïŒé¢æ°ã䜿çšããŠããã©ã€ããŒãããŒã¿ãæ¶å»ããå¿ èŠããããŸãã login.cpp 126
static status_t login(const char* user, struct passwd** _passwd) { .... bool ok = verify_password(passwd, spwd, password); memset(password, 0, sizeof(password)); if (!ok) return B_PERMISSION_DENIED; *_passwd = passwd; return B_OK; }
æ®å¿µãªãããäžèšã®ã³ãŒãã¯ãã¹ã¯ãŒããã¯ãªãŒã³ã«ããªããŸãŸã«ããå¯èœæ§ããããŸãã ããã¹ã¯ãŒããé åã¯æåŸã«ã¯ãªã¢ããã䜿çšãããªãããšã«æ³šæããŠãã ããã ãããã£ãŠãããã°ã©ã ã®ãªãªãŒã¹ããŒãžã§ã³ããã«ãããå Žåãã³ã³ãã€ã©ã¯ã»ãšãã©ã®å ŽåãmemsetïŒïŒé¢æ°åŒã³åºããåé€ããŸãã ã³ã³ãã€ã©ã«ã¯ãããè¡ããã¹ãŠã®æš©å©ããããŸãã ã¢ãã©ã€ã¶ãŒã¯Windowsçšã®é¢æ°ã䜿çšããããšãæšå¥šããŠããŸããããã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ãã³ã³ãã€ã©ãŒã®æé©åãåé¿ããå¥ã®æ¹æ³ãèŠã€ããå¿ èŠããããŸãã
ããå±éºãªå ŽæïŒ
- V597ã³ã³ãã€ã©ãŒã¯ããfinalcountããããã¡ãŒã®ãã©ãã·ã¥ã«äœ¿çšããããmemsetãé¢æ°åŒã³åºããåé€ã§ããŸããã RtlSecureZeroMemoryïŒïŒé¢æ°ã䜿çšããŠããã©ã€ããŒãããŒã¿ãæ¶å»ããå¿ èŠããããŸãã sha1.c 228
- V597ã³ã³ãã€ã©ãŒã¯ããencoded_blockããããã¡ãŒã®ãã©ãã·ã¥ã«äœ¿çšããããmemsetãé¢æ°åŒã³åºããåé€ã§ããŸããã RtlSecureZeroMemoryïŒïŒé¢æ°ã䜿çšããŠããã©ã€ããŒãããŒã¿ãæ¶å»ããå¿ èŠããããŸãã dst_api.c 446
- V597ã³ã³ãã€ã©ãŒã¯ããmemsetãé¢æ°åŒã³åºããåé€ã§ããŸããããã¯ããin_buffããããã¡ãŒã®ãã©ãã·ã¥ã«äœ¿çšãããŸãã RtlSecureZeroMemoryïŒïŒé¢æ°ã䜿çšããŠããã©ã€ããŒãããŒã¿ãæ¶å»ããå¿ èŠããããŸãã dst_api.c 916
- V597ã³ã³ãã€ã©ãŒã¯ã 'repeatedPassword'ãããã¡ãŒã®ãã©ãã·ã¥ã«äœ¿çšããã 'memset'é¢æ°åŒã³åºããåé€ã§ããŸããã RtlSecureZeroMemoryïŒïŒé¢æ°ã䜿çšããŠããã©ã€ããŒãããŒã¿ãæ¶å»ããå¿ èŠããããŸãã passwd.cpp 171
V630 ãmallocãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã PDFWriter.cpp 117
status_t PDFWriter::PrintPage(int32 pageNumber, int32 pageCount) { .... pictures = (BPicture **)malloc(pictureCount * sizeof(BPicture *)); picRects = (BRect *)malloc(pictureCount * sizeof(BRect)); //<== picPoints = (BPoint *)malloc(pictureCount * sizeof(BPoint)); //<== picRegion = new BRegion(); .... }
ä»»æã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã®é åã«mallocã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãå Žåããªããžã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãäœææã«åŒã³åºãããããšããç Žæ£ããããšãã«ãã¹ãã©ã¯ã¿ãŒãåŒã³åºãããŸããã ãã®ãããªã³ãŒãã¯ãåæåãããŠããªãå€æ°ããã®ä»ã®ãšã©ãŒãåŠçããå¯èœæ§ããããŸãã
V512 ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãcontextãã®ã¢ã³ããŒãããŒãçºçããŸãã sha2.c 623
#define MEMSET_BZERO(p,l) memset((p), 0, (l)) void solv_SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { .... /* Clean up state data: */ MEMSET_BZERO(context, sizeof(context)); usedspace = 0; }
ãªã»ããå¯èœãªã¡ã¢ãªã®ãµã€ãºã¯ãæ§é äœã®ãµã€ãºã§ã¯ãªãããã€ã³ã¿ãŒã®ãµã€ãºã«çãããªããŸãã
ãã®ãããªä»ã®å ŽæïŒ
- V512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãcontextãã®ã¢ã³ããŒãããŒãçºçããŸãã sha2.c 644
- V512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãcontextãã®ã¢ã³ããŒãããŒãçºçããŸãã sha2.c 953
- V512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãcontextãã®ã¢ã³ããŒãããŒãçºçããŸãã sha2.c 973
- V512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãcontextãã®ã¢ã³ããŒãããŒãçºçããŸãã sha2.c 1028
- V512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãcontextãã®ã¢ã³ããŒãããŒãçºçããŸãã sha2.c 1048
ãã®ä»
V591évoidé¢æ°ã¯å€ãè¿ãå¿ èŠããããŸãã pc.c 1031
ULONG set_var(char *name, ULONG val) { variable *v; v = lookup_var(name); if (v != NULL) v->value = val; else add_var(name, val); }
ã»ãšãã©ã®å Žåãset_varïŒïŒé¢æ°ãåŒã³åºããšããæ»ãå€ã¯äœ¿çšãããŸããã ãããã圌ããããã䜿çšããå Žåã圌ãã¯äžå®ã®å€ãååŸããŸãã
V671 ãã¹ã¯ãããæ©èœã¯ããstd :: declval <_AllocïŒ>ïŒïŒãå€æ°ãããèªäœãšäº€æããå¯èœæ§ããããŸãã alloc_traits.h 191
static constexpr bool _S_nothrow_swap() { using std::swap; return !_S_propagate_on_swap() || noexcept( swap(std::declval<_Alloc&>(), std::declval<_Alloc&>())); }
ç解ã§ããªãswapïŒïŒé¢æ°ã®äœ¿çšïŒåãåŒæ°ã
V519 ' data- > error'å€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ããã§ãã¯ïŒ222ã223ãrepo_solv.c 223
static unsigned char * data_read_idarray(.... , Repodata *data) { .... data->error = pool_error( //<== data->repo->pool, SOLV_ERROR_ID_RANGE, "data_read_idarray: id too large (%u/%u)", x, max); data->error = SOLV_ERROR_ID_RANGE; //<== .... }
è¡ã®1ã€ã®å€æ°ã«ç°ãªãå€ãå²ãåœãŠãŸãã ããããã¿ã€ããã¹ã
V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'sizeofïŒstruct tlv_header_tïŒ'åŒã§ããããšã¯å¥åŠã§ãã print-slow.c 255
void slow_print(register const u_char *pptr, register u_int len) { .... if (vflag > 1) print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)), "\n\t ", tlv_len-sizeof(struct tlv_header_t)); .... }
sizeofïŒïŒæŒç®åã®åŒæ°ãsizeofïŒïŒã§ãã ãã®æŒç®åã¯åŒã®ã¿ã€ããèšç®ãããã®ã¿ã€ãã®ãµã€ãºãè¿ããŸãããåŒèªäœã¯è©äŸ¡ãããŸããã ããã§ã¯ãæ§é ã®ãµã€ãºã¯äœã«ã圱é¿ããŸããã
ãã®ãããªå Žæã¯ãããããããŸãïŒ
- V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'sizeofïŒstruct lmp_object_headerïŒ'åŒã§ããããšã¯å¥åŠã§ãã print-lmp.c 872
- V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'sizeofïŒstruct tlv_header_tïŒ'åŒã§ããããšã¯å¥åŠã§ãã print-slow.c 182
- V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'sizeofïŒstruct eigrp_tlv_headerïŒ'åŒã§ããããšã¯å¥åŠã§ãã print-eigrp.c 283
- V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'sizeofïŒstruct eigrp_tlv_headerïŒ'åŒã§ããããšã¯å¥åŠã§ãã print-eigrp.c 471
ãããã«
Haikuã¯å€§èŠæš¡ã§çãããããžã§ã¯ãã§ãã ãã¹ãããŠãéçºã«å°ãè²¢ç®ããã®ã¯é¢çœãã£ãã§ãã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ã®ç§ã®çµéšã«ãããããããããã§ç§ã¯å€ãã®çããã¢ãã©ã€ã¶ãŒèŠåã«äŒããŸããã ç§ã®æèŠã§ã¯ãèšäºã«ã¯æãçããããœãŒã¹ã³ãŒãã®äŸãå«ãŸããŠããŸããã èšäºã«å«ãŸããŠããªãããŸãã¯ç§ãèŠéããä»ã®ãã¹ãŠã¯ããããžã§ã¯ãã®äœæè ãå®å šãªæ€èšŒãã°ã§èŠã€ããããšãã§ããŸãã
ãã®èšäºã¯è±èªã§ãã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã PVS-Studioã«ããHaikuãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒBeOSãã¡ããªïŒã®åæã ããŒã2 ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-Studioããã³CppCatããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã