We grouped the diagnostic, so that you can get the general idea of what PVS-Studio is capable of.
As it is hard to do strict grouping, some diagnostics belong to several groups. For example, the incorrect condition "if (abc == abc)" can be interpreted both as a simple typo, but also as a security issue, because it leads to the program vulnerability if the input data are incorrect.
Some of the errors, on the contrary, couldn't fit any of the groups, because they were too specific. Nevertheless this table gives the insight about the functionality of the static code analyzer.
You can find a permanent link to machine-readable map of all analyzer's rules in XML format here.
Main PVS-Studio diagnostic abilities | Diagnostics |
64-bit issues | C, C++: V101-V128, V201-V207, V220, V221, V301-V303 |
Check that addresses to stack memory does not leave the function | C, C++: V506, V507, V558, V758 |
Arithmetic over/underflow | C, C++: V636, V658, V784, V786, V1012, V1028, V1029, V1033 C#: V3040, V3041 Java: V6011, V6088 |
Array index out of bounds | C, C++: V557, V582, V643, V781, V1038 C#: V3106 Java: V6025, V6079 |
Double-free | C, C++: V586, V749, V1002, V1006 |
Dead code | C, C++: V606, V607 |
Microoptimization | C, C++: V801-V829 |
Unreachable code | C, C++: V551, V695, V734, V776, V779, V785 C#: V3136, V3142 Java: V6018, V6019 |
Uninitialized variables | C, C++: V573, V614, V679, V730, V737, V788, V1007, V1050 C#: V3070, V3128 Java: V6036, V6050, V6052, V6090 |
Unused variables | C, C++: V603, V751, V763, V1001 C#: V3061, V3065, V3077, V3117, V3137, V3143 Java: V6021, V6022, V6023 |
Illegal bitwise/shift operations | C, C++: V610, V629, V673, V684, V770 C#: V3134 Java: V6034, V6069 |
Undefined/unspecified behavior | C, C++: V567, V610, V611, V681, V704, V708, V726, V736, V1016, V1026, V1032, V1061 |
Incorrect handling of the types (HRESULT, BSTR, BOOL, VARIANT_BOOL, float, double) | C, C++: V543, V544, V545, V716, V721, V724, V745, V750, V676, V767, V768, V772, V775, V1027, V1034, V1046, V1060 C#: V3111, V3121, V3148 |
Improper understanding of function/class operation logic | C, C++: V518, V530, V540, V541, V554, V575, V597, V598, V618, V630, V632, V663, V668, V698, V701, V702, V717, V718, V720, V723, V725, V727, V738, V742, V743, V748, V762, V764, V780, V789, V797, V1014, V1024, V1031, V1035, V1045, V1052, V1053, V1054, V1057 C#: V3010, V3057, V3068, V3072, V3073, V3074, V3082, V3084, V3094, V3096, V3097, V3102, V3103, V3104, V3108, V3114, V3115, V3118, V3123, V3126, V3145 Java: V6009, V6010, V6016, V6026, V6029, V6049, V6055, V6058, V6064, V6068, V6081 |
Misprints | C, C++: V501, V503, V504, V508, V511, V516, V519, V520, V521, V525, V527, V528, V529, V532, V533, V534, V535, V536, V537, V539, V546, V549, V552, V556, V559, V560, V561, V564, V568, V570, V571, V575, V577, V578, V584, V587, V588, V589, V590, V592, V600, V602, V604, V606, V607, V616, V617, V620, V621, V622, V625, V626, V627, V633, V637, V638, V639, V644, V646, V650, V651, V653, V654, V655, V660, V661, V662, V666, V669, V671, V672, V678, V682, V683, V693, V715, V722, V735, V747, V754, V756, V765, V767, V787, V791, V792, V796, V1013, V1015, V1021, V1040, V1051 C#: V3001, V3003, V3005, V3007, V3008, V3009, V3011, V3012, V3014, V3015, V3016, V3020, V3028, V3029, V3034, V3035, V3036, V3037, V3038, V3050, V3055, V3056, V3057, V3062, V3063, V3066, V3081, V3086, V3091, V3092, V3107, V3109, V3110, V3112, V3113, V3116, V3122, V3124, V3132, V3140 Java: V6001, V6005, V6009, V6012, V6014, V6015, V6017, V6021, V6026, V6028, V6029, V6030, V6031, V6037, V6041, V6042, V6043, V6045, V6057, V6059, V6061, V6062, V6063, V6077, V6080, V6085, V6091 |
Missing Virtual destructor | C, C++: V599, V689 |
Coding style not matching the operation logic of the source code | C, C++: V563, V612, V628, V640, V646, V705, V1044 C#: V3018, V3033, V3043, V3067, V3069, V3138, V3150 Java: V6040, V6047, V6086, V6089 |
Copy-Paste | C, C++: V501, V517, V519, V523, V524, V571, V581, V649, V656, V691, V760, V766, V778, V1037 C#: V3001, V3003, V3004, V3008, V3012, V3013, V3021, V3030, V3058, V3127, V3139, V3140 Java: V6003, V6004, V6012, V6021, V6027, V6032, V6033, V6039, V6067, V6072 |
Incorrect usage of exceptions | C, C++: V509, V565, V596, V667, V740, V741, V746, V759, V1022 C#: V3006, V3052, V3100, V3141 Java: V6006, V6051 |
Buffer overrun | C, C++: V512, V514, V594, V635, V641, V645, V752, V755 |
Security issues | C, C++: V505, V510, V511, V512, V518, V531, V541, V547, V559, V560, V569, V570, V575, V576, V579, V583, V597, V598, V618, V623, V642, V645, V675, V676, V724, V727, V729, V733, V743, V745, V750, V771, V774, V782, V1003, V1005, V1010, V1017 C#: V3022, V3023, V3025, V3027, V3053, V3063 Java: V6007, V6046, V6054 |
Operation priority | C, C++: V502, V562, V593, V634, V648 C#: V3130, V3133 Java: V6044 |
Null pointer / null reference dereference | C, C++: V522, V595, V664, V757, V769 C#: V3019, V3042, V3080, V3095, V3105, V3125, V3141, V3145, V3146, V3148, V3149, V3153 Java: V6008, V6060 |
Unchecked parameter dereference | C, C++: V595, V664, V783, V1004 C#: V3095 Java: V6060 |
Synchronization errors | C, C++: V712, V1011, V1018, V1025, V1036 C#: V3032, V3054, V3079, V3083, V3089, V3090, V3147 Java: V6070, V6074, V6082 |
WPF usage errors | C#: V3044-V3049 |
Resource leaks | C, C++: V701, V773, V1020, V1023 |
Check for integer division by zero | C, C++: V609 C#: V3064, V3151, V3152 Java: V6020 |
Serialization / deserialization issues | C, C++: V739, V1024 C#: V3094, V3096, V3097, V3099, V3103, V3104 Java: V6065, V6075, V6076, V6083, V6087 |
Customized user rules | C, C++: V2001-V2014 |
Table – PVS-Studio functionality.
As you see, the analyzer is especially useful is such spheres as looking for bugs caused by Copy-Paste and detecting security flaws.
To these diagnostics in action, have a look at the error base. We collect all the errors that we have found, checking various open source projects with PVS-Studio.