Anda di halaman 1dari 16

Visual Studio 2010 PVS-Studio

: : 20.04.2011

, Visual Studio 2010. PVS-Studio. open source .

, .

" [1] , . . . . , ,

"

, . ,
y y y y y

open source c Visual Studio 2010 Premium. PVS-Studio. :

eMule Plus; Pixie; VirtualDub; WinMerge; XUIFramework. !

eMule Plus
Visual Studio 237. PVS-Studio 68. 3. 4.

Visual Studio: warning C6054: String 'szwThemeFile' might not be zero-terminated. c:\emuleplus\dialogmintraybtn.hpp 445

WCHAR szwThemeFile[MAX_PATH]; WCHAR szwThemeColor[256]; if (m_themeHelper.GetCurrentThemeName (szwThemeFile, ARRSIZE(szwThemeFile), szwThemeColor, ARRSIZE(szwThemeColor), NULL, 0) != S_OK) return NULL; WCHAR *p; if ((p = wcsrchr(szwThemeFile, L' \\')) == NULL)

0, , .

Visual Studio: warning C6269: Possibly incorrect order of operations: dereference ignored. c:\emuleplus\customautocomplete.cpp 277

PVS-Studio: V532 Consider inspecting the statement of '*pointer++' pattern. Probably meant: '(*pointer)++'. customautocomplete.cpp 277

if (pceltFetched != NULL) *pceltFetched++;

" .

" ,

(*ptr)++. ,

Visual Studio: warning C6298: Argument '6': using a read -only string as a writable string argument. This will attempt to write into static

read-only memory and cause random crashes . c:\emuleplus\firewallopener.cpp 183

HRESULT hr = pNSC->AddPortMapping( riPortRule.m_strRuleName.AllocSysString(), riPortRule.m_byProtocol, riPortRule.m_nPortNumber, riPortRule.m_nPortNumber, 0, L"127.0.0.1", ICSTT_IPADDRESS, &pNSPM);

, . . ? , . , ,

. ,

Visual Studio: warning C6314: Incorrect order of operations: bitwiseor has higher precedence than the conditional -expression operator. Add parentheses to clarify intent. c: \emuleplus\searchlistctrl.cpp 659

PVS-Studio: V502 Perhaps the '?:' operator works in a different way than it was expected. The '?:' operator has a lower priority than the '|' operator. searchlistctrl.cpp 659

menuSearchFile.AppendMenu( MF_STRING | ((iSelectionMark != -1) && (dwSelectedCount > 0) && g_App.m_pServerConnect ->IsConnected() && ((pCurServer = g_App.m_pServerConnect ->GetCurrentServer())!= NULL)&& (pCurServer->GetTCPFlags() & SRV_TCPFLG_RELATEDSEARCH)) ? MF_ENABLED : MF_GRAYED, MP_SEARCHRELATED, GetResString(IDS_SEARCHRELATED) );

( ... ), " ".

) ( ? ,

PVS-Studio: V519 The 'm_clrSample' object is assigned values twice successively. Perhaps this is a mistake. fontpreviewcombo.cpp 61

CFontPreviewCombo::CFontPreviewCombo() { ... m_clrSample = GetSysColor(COLOR_WINDOWTEXT); m_clrSample = RGB(60,0,0); ... }

RGB(60,0,0)

Pixie
Visual Studio 18. PVS-Studio 65. 5. 0.

PVS-Studio: V519 The 'numRays' object is assigned values twice successively. Perhaps this is a mistake. bundles.cpp 579

void CGatherBundle::post() { numRays = last; numRays = 0; last = 0; depth++; }

, . ?

, ?

numRays . !

PVS-Studio: V501 There are identical sub -expressions to the left and to the right of the '|' operator: PARAMETER_DPDU | PARAMETER_DPDU

quadrics.cpp 880

if (up & (PARAMETER_DPDU | PARAMETER_DPDU)) {

, . " , ". -

. . , ,

PVS-Studio: V501 There are identical sub -expressions to the left and to the right of the '|' operator: SLC_VECTOR | SLC_VECTOR expression.cpp 2604

lock(N, getConversion(SLC_VECTOR | SLC_VECTOR,parameters[2]));

SLC_VECTOR

PVS-Studio: V505 The 'alloca' function is used inside the loop. This can quickly overflow stack. polygons.cpp 1120

inline ...

void

triangulatePolygon(...) {

for (i=1;i<nloops;i++) { ... do { ... do { ... CTriVertex *snVerte x = (CTriVertex *)

alloca(2*sizeof(CTriVertex)); ... } while(dVertex != loops[0]);

... } while(sVertex != loops[i]); ... } ... }

alloca

VirtualDub
Visual Studio 24. PVS-Studio 41. 2. 0.

PVS-Studio: V547 Expression 'c < 0' is always false. Unsigned type value is never < 0. lexer.cpp 279

typedef unsigned short wint_t;

wint_t lexgetescape() { wint_t c = lexgetc(); if (c < 0) fatal("Newline found in escape sequence"); ... }

false.

PVS-Studio: V557 Array overrun is possible. The '9' index is pointing beyond array bound. f_convolute.cpp 73

struct ConvoluteFilterData { long m[9];

long bias; void *dyna_func; DWORD dyna_size; DWORD dyna_old_protect; BOOL fClip; };

static unsigned long __fastcall do_conv( unsigned long *data, const ConvoluteFilterData *cfd, long sflags, long pit) { long rt0=cfd->m[9], gt0=cfd->m[9], bt0=cfd->m[9]; ... }

WinMerge
Visual Studio 343. PVS-Studio 69. 12. 3.

Visual Studio: warning C6313: Incorrect operator: zero -valued flag cannot be tested with bitwise-and. Use an equality test to check for zero-valued flags. c:\winmerge\src\bcmenu.cpp 1489

else if (nFlags&MF_STRING){ ASSERT(!(nFlags&MF_OWNERDRAW)); ModifyMenu(pos,nFlags,nID,mdata ->GetString()); }

"

".

Visual Studio: warning C6287: Redundant code: the left and right sub-expressions are identical. c:\winmerge\src\editlib\ccrystaleditview.cpp 1560

PVS-Studio: V501 There are identical sub -expressions to the left and to the right of the '||' operator: c == '}' || c == '} ' ccrystaleditview.cpp 1560

bool isclosebrace (TCHAR c) { return c == _T ('}') || c == _T ('}') || c == _T (']') || c == _T ('>'); }

. .

? "Copy-paste-technology",

Visual Studio: warning C6287: Redundant code: the left and right sub-expressions are identical. c: \winmerge\src\mergedoc.cpp 1165

PVS-Studio: V501 There are identical sub -expressions to the left and to the right of the '||' operator. mergedoc.cpp 1165

if ((m_nBufferType[nBuffer] == BUFFER_UNNAMED) || (m_nBufferType[nBuffer] == BUFFER_UNNAMED)) nSaveErrorCode = SAVE_NO_FILENAME;

PVS-Studio: V551 The code under this 'case' label is unreacha ble. The value range of signed char type: [ -128, 127].

ccrystaltextview.cpp 1646

TCHAR ch = strText[i]; switch (ch) { case 0xB7: case 0xBB: strHTML += ch; strHTML += _T("<wbr>"); bLastCharSpace = FALSE; nNonbreakChars = 0; break;

, . char.

case . TCHAR

PVS-Studio: V524 It is odd that the body of 'IsValidTextPosX' function is fully equivalent to the body of 'IsValidTextPos' function (ccrystaltextview.cpp, line 3700). ccrystaltextview.cpp 3707

bool CCrystalTextView::IsValidTextPos (const CPoint &point) { return GetLineCount () > 0 && m_nTopLine >= 0 && m_nOffsetChar >= 0 && point.y >= 0 && point.y < GetLineCount () && point.x >= 0 && point.x <= GetLineLength (point.y); }

bool CCrystalTextView::IsValidTextPosX (const CPoint &point) {

return GetLineCount () > 0 && m_nTopLine >= 0 && m_nOffsetChar >= 0 && point.y >= 0 && point.y < GetLineCount () && point.x >= 0 && point.x <= GetLineLength (point.y); }

bool CCrystalTextView::IsValidTextPosY (const CPoint &point) { return GetLineCount () > 0 && m_nTopLine >= 0 && m_nOffsetChar >= 0 && point.y >= 0 && point.y < GetLineCount (); }

... IsValidTextPosX() .

PVS-Studio: V563 It is possible that this 'else' branch must apply to the previous 'if' statement. bcmenu.cpp 1852

if(IsLunaMenuStyle()) if(!xp_space_accelerators)return; else if(!original_space_accelerators)return;

, ?

if

else?

PVS-Studio: V556 The values of different enum types are compared: switch(ENUM_TYPE_A) { case ENUM_TYPE_B: ... }. diffwrapper.cpp 956

enum output_style {} ...

enum DiffOutputType m_outputStyle;

switch (m_options.m_outputStyle) { case OUTPUT_CONTEXT:

enum switch.

PVS-Studio: V530 The return value of function 'empty' is required to be utilized. diractions.cpp 1307

void CDirView::GetItemFileNames(int sel, String& strLeft, String& strRight) const { UINT_PTR diffpos = GetItemKey(sel); if (diffpos == (UINT_PTR)SPECIAL_ITEM_POS) { strLeft.empty(); strRight.empty();

empty()

empty.

PVS-Studio: V524 It is odd that the body of 'OnUpdateLastdiff' function is fully equivalent to the body of 'OnUpdateFirstdiff' function (DirView.cpp, line 2189). dirview.cpp 2220

void CDirView::OnUpdateLastdiff(CCmdUI* pCmdUI) { int firstDiff = GetFirstDifferentItem(); if (firstDiff > -1) pCmdUI->Enable(TRUE); else

pCmdUI->Enable(FALSE); }

void CDirView::OnUpdateFirstdiff(CCmdUI* pCmdUI) { int firstDiff = GetFirstDifferentItem(); if (firstDiff > -1) pCmdUI->Enable(TRUE); else pCmdUI->Enable(FALSE); }

...

PVS-Studio: V501 There are identical sub -expressions 'pView1->GetTextBufferEol (line)' to the left and to the right of the '!=' operator. mergedoclinediffs.cpp 216

if (pView1->GetTextBufferEol(line) != pView1->GetTextBufferEol(line)) {

...

pView2.

PVS-Studio: V530 The return value of function 'empty' is required to be utilized. varprop.cpp 133

void VariantValue::Clear() { m_vtype = VT_NULL; m_bvalue = false; m_ivalue = 0;

m_fvalue = 0; m_svalue.empty(); m_tvalue = 0; }

empty()

PVS-Studio: V510

The 'Format' function is not expected to receive

class-type variable as 'N' actual argument". PropShel 105

String GetSysError(int nerr); ... CString msg; msg.Format( _T("Failed to open registry key HKCU/%s: \n\t%d : %s"), f_RegDir, retVal, GetSysError(retVal) );

WinMerge . "String" , c_str(). "std::wstring". , , (Access Violation). .

PVS-Studio: V534 It is likely that a wrong variable is being compared inside the 'for' operator. Consider reviewing 'i'." BinTrans.cpp 357

// Get length of translated array of bytes from text. int Text2BinTranslator::iLengthOfTransToBin( char* src, int srclen ) { ... for (k=i; i<srclen; k++) {

if (src[k]=='>') break; } ... }

. '>' . '>' , .

Access Violation. 'srclen' 'i', 'k'.

XUIFramework
Visual Studio 93. PVS-Studio 30. 5. 2.

Visual Studio: warning C6269: Possibly incorrect order of operations: dereference ignored c:\xui-gui framework\widgets\cstatichtml\ppdrawmanager.cpp 298

PVS-Studio: V532 Consider inspecting

the statement of '*pointer++'

pattern. Probably meant: '(*pointer)++'. ppdrawmanager.cpp 298

for (DWORD pixel = 0; pixel < dwWidth * dwHeight; pixel++, *pBits++)

*ptr++.

Visual Studio: warning C6283: 'pBuffer' is allocated with array new[], but deleted with scalar delete. c:\xui-gui framework\widgets\cxstatic\cxstatic.cpp 544

BYTE* pBuffer = new BYTE [ nBufferLen ]; ... delete pBuffer;

delete delete[]. .

PVS-Studio: V519 The 'm_xSt' object is assigned values twice successively. Perhaps this is a mistake. resizedlg.cpp 244

m_xSt = CST_RESIZE; m_xSt = CST_RESIZE;

m_ySt.

V531 It is odd that a sizeof() operator is multiplied by sizeof(). pphtmldrawer.cpp 258

DWORD dwLen = ::LoadString(hInstDll, dwID, szTemp, (sizeof(szTemp) * sizeof(TCHAR)));

sizeof(szTemp) / sizeof(TCHAR) .

PVS-Studio: V556 The values of different enum types are compared: enuHAlign == Center. cxstatic.cpp 151

if (enuHAlign == Center)

Center.

enuHAlign == Midle. enum,

if (enuVAlign == Middle), .

PVS-Studio: V501 There are identical sub -expressions to the left and to the right of the '||' operator. resizedlg.cpp 157

HDWP CItemCtrl::OnSize(...) { ...

if (m_styTop == CST_ZOOM || m_styTop == CST_ZOOM || m_styBottom == CST_DELTA_ZOOM || m_styBottom == CST_DELTA_ZOOM) ... }

HDWP CItemCtrl::OnSize(...) { ... if (m_styTop == CST_ZOOM || m_styTop == CST_DELTA_ZOOM || m_styBottom == CST_ZOOM || m_styBottom == CST_DELTA_ZOOM) ... }

. , .

1.

. . http://www.viva64.com/ru/a/0071/.

Anda mungkin juga menyukai