1. 什么是Prefast 3.Prefast能帮你找到哪些错误
//
no initial
void defect1() { int a; int b; b = a; } 会报: d:/test/testcode/testcode.cpp(18) : warning C6001: Using uninitialized memory 'a': Lines: 15, 16, 18
//
one path dereference NULL
void defect4( int b, int c) { int * p = NULL; int a = 1 ; if (b == 1 ) { if (c == 1 ) { p = & a; } else { } } else { if (c == 1 ) { } else { p = & a; } } * p; return ; } 会报:d:/test/testcode/testcode.cpp(65) : warning C6011: Dereferencing NULL pointer 'p': Lines: 45, 46, 48, 57, 65
void
defect5()
{ int a = 1 ; int b = 1 ; int c = 1 ; if (a & b == c) return ; } 会报: d:/test/testcode/testcode.cpp(76) : warning C6281: Incorrect order of operations: relational operators have higher precedence than bitwise operators
void
defect8()
{ char buf[ 100 ]; char buf2[ 200 ]; int i = 100 ; sprintf(buf, " hello world %d " , i); strcpy(buf, buf2); } 会报: d:/test/testcode/testcode.cpp(133) : warning C6202: Buffer overrun for 'buf', which is possibly stack allocated, in call to 'strcpy': length '200' exceeds buffer size '100'
//
infinite loop
void defect14() { signed char i; for (i = 100 ; i >= 0 ; i ++ ) { ; } } 会报: d:/test/testcode/testcode.cpp(198) : warning C6292: Ill-defined for-loop: counts up from maximum
//
Format string mismatch
void defect21() { char buff[ 5 ]; sprintf(buff, " %s %s " , " a " ); } 会报: d:/test/testcode/testcode.cpp(277) : warning C6063: Missing string argument to 'sprintf' that corresponds to conversion specifier '2'
void
defect27()
{ CreateProcess(NULL, " c://program files//Project.exe arg1 " , // correct "/"c://program files//Project.exe/" arg1", NULL, NULL, false , 0 , NULL, NULL, NULL, NULL); } 会报: d:/test/testcode/testcode.cpp(327) : warning C6277: NULL application name with an unquoted path in call to 'CreateProcessA': results in a security vulnerability if the path contains spaces
void
defect32()
{ int a = 1 ; if (a = 2 ) return ; } 会报: d:/test/testcode/testcode.cpp(405) : warning C6282: Incorrect operator: assignment of constant in Boolean context. Consider using '==' instead
//
always false
void defect45() { int x; if ( 0 && x ++ ) { ; } } 会报: d:/test/testcode/testcode.cpp(564) : warning C6237: (<zero> && <expression>) is always zero. <expression> is never evaluated and might have side effects |