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.