Opened 9 years ago

Closed 8 years ago

Last modified 13 months ago

#5450 closed defect

AUDIO: Code analysis warnings

Reported by: Templier Owned by:
Priority: normal Component: Audio
Keywords: build Cc:
Game:

Description

Here are the warnings I get when compiling using Code Analysis in VS2010. I tried to remove all the obvious false positives. Some warnings look suspicious, others are pointing to correct code that still might benefit from better error checking.

d:\sources\scummvm\scummvm\sound\softsynth\cms.cpp(194): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\cms.cpp(201): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\ym2612.cpp(128): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\ym2612.cpp(144): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\ym2612.cpp(153): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\ym2612.cpp(164): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\mpu401.cpp(39): warning C6282: Incorrect operator: assignment of constant in Boolean context. Consider using '==' instead
d:\sources\scummvm\scummvm\sound\rate.cpp(310): warning C6011: Dereferencing NULL pointer 'ptr++'
d:\sources\scummvm\scummvm\sound\rate.cpp(310): warning C6011: Dereferencing NULL pointer 'ptr++'
d:\sources\scummvm\scummvm\sound\softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp(973): warning C6011: Dereferencing NULL pointer 'co'
d:\sources\scummvm\scummvm\sound\softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp(1041): warning C6011: Dereferencing NULL pointer 'o'
d:\sources\scummvm\scummvm\sound\softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp(1043): warning C6011: Dereferencing NULL pointer 'c'
d:\sources\scummvm\scummvm\sound\softsynth\opl\dbopl.cpp(1286): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\opl\dbopl.cpp(1293): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\opl\dbopl.cpp(1295): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\opl\dbopl.cpp(1485): warning C6011: Dereferencing NULL pointer 'chip'
d:\sources\scummvm\scummvm\sound\softsynth\opl\dbopl.cpp(1500): warning C6011: Dereferencing NULL pointer 'chan'
d:\sources\scummvm\scummvm\sound\softsynth\opl\mame.cpp(280): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\opl\mame.cpp(649): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\opl\mame.cpp(650): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\softsynth\opl\mame.cpp(734): warning C6011: Dereferencing NULL pointer 'ENV_CURVE'
d:\sources\scummvm\scummvm\sound\decoders\adpcm.cpp(534): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\decoders\adpcm.cpp(541): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm\sound\decoders\voc.cpp(124): warning C6308: 'realloc' might return null pointer: assigning null pointer to 'ret_sound', which is passed as an argument to 'realloc', will cause the original memory block to be leaked

Warning information:
C6297: http://msdn.microsoft.com/en-us/library/9t02bbsx.aspx

Note:
If you want to try it yourself, you will need:
- the create_project patch set, along with the WIP code analysis patch (http://bitbucket.org/Littleboy/scummvm-jt/src)
- the following patch to silence some false positives ( http://bitbucket.org/Littleboy/scummvm-jt/src/tip/COMMON%20-%20Add%20annotations%20for%20analysis%20build%20configuration.patch )
- Visual Studio 2010 Ultimate or Team System (create_project support for analysis with VS2005/2008 isn't complete yet)

Ticket imported from: #3087918. Ticket imported from: bugs/5450.

Change History (7)

comment:1 by DrMcCoy, 9 years ago

The ones in decoders/adpcm.cpp (if those are within Tinsel_ADPCMStream::readBufferTinselHeader() as I think they are; the line numbers don't seem to quite match up here) are false positives, since due to how the shifting value is calculated, the result always fits into 32 bits.

comment:2 by sev-, 9 years ago

Could you please rerun it?

comment:3 by Templier, 9 years ago

Summary: SOUND: Code analysis warningsAUDIO: Code analysis warnings

comment:4 by Templier, 9 years ago

Here are the results (I also added asserts after some of the malloc calls, so they don't show up anymore):

d:\sources\scummvm\scummvm-jt\audio\mpu401.cpp(39): warning C6282: Incorrect operator: assignment of constant in Boolean context. Consider using '==' instead
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\dbopl.cpp(1282): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\dbopl.cpp(1289): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\dbopl.cpp(1291): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\dbopl.cpp(1481): warning C6011: Dereferencing NULL pointer 'chip': Lines: 1374, 1376, 1396, 1397, 1399, 1400, 1396, 1397, 1399, 1400, 1396, 1397, 1399, 1400, 1396, 1404, 1405, 1406, 1404, 1405, 1406, 1404, 1405, 1406, 1404, 1409, 1410, 1411, 1409, 1410, 1411, 1409, 1410, 1411, 1409, 1432, 1434, 1435, 1436, 1437, 1438, 1440, 1442, 1443, 1444, 1445, 1432, 1434, 1435, 1436, 1437, 1438, 1440, 1442, 1443, 1444, 1445, 1432, 1434, 1435, 1436, 1437, 1438, 1440, 1442, 1443, 1444, 1445, 1432, 1450, 1451, 1452, 1453, 1454, 1457, 1452, 1453, 1454, 1457, 1452, 1453, 1454, 1457, 1452, 1450, 1451, 1452, 1450, 1451, 1452, 1450, 1461, 1462, 1463, 1464, 1461, 1462, 1463, 1464, 1461, 1462, 1463, 1464, 1461, 1467, 1468, 1469, 1470, 1475, 1476, 1479, 1481
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\dbopl.cpp(1496): warning C6011: Dereferencing NULL pointer 'chan': Lines: 1374, 1376, 1396, 1397, 1399, 1400, 1396, 1397, 1399, 1400, 1396, 1397, 1399, 1400, 1396, 1404, 1405, 1406, 1404, 1405, 1406, 1404, 1405, 1406, 1404, 1409, 1410, 1411, 1409, 1410, 1411, 1409, 1410, 1411, 1409, 1432, 1434, 1435, 1436, 1437, 1438, 1440, 1442, 1443, 1444, 1445, 1432, 1434, 1435, 1436, 1437, 1438, 1440, 1442, 1443, 1444, 1445, 1432, 1434, 1435, 1436, 1437, 1438, 1440, 1442, 1443, 1444, 1445, 1432, 1450, 1451, 1452, 1453, 1454, 1457, 1452, 1453, 1454, 1457, 1452, 1453, 1454, 1457, 1452, 1450, 1451, 1452, 1450, 1451, 1452, 1450, 1461, 1462, 1463, 1464, 1461, 1462, 1463, 1464, 1461, 1462, 1463, 1464, 1461, 1467, 1468, 1469, 1470, 1475, 1476, 1479, 1481, 1482, 1468, 1469, 1470, 1475, 1476, 1479, 1481, 1482, 1468, 1469, 1470, 1475, 1476, 1479, 1481, 1482, 1468, 1485, 1486, 1490, 1492, 1494, 1495, 1496
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\mame.cpp(280): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\mame.cpp(649): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\opl\mame.cpp(650): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\cms.cpp(198): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\cms.cpp(205): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\ym2612.cpp(128): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\ym2612.cpp(144): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\ym2612.cpp(153): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\softsynth\ym2612.cpp(164): warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value
d:\sources\scummvm\scummvm-jt\audio\decoders\voc.cpp(124): warning C6308: 'realloc' might return null pointer: assigning null pointer to 'ret_sound', which is passed as an argument to 'realloc', will cause the original memory block to be leaked
d:\sources\scummvm\scummvm-jt\audio\softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp(973): warning C6011: Dereferencing NULL pointer 'co': Lines: 932, 935, 937, 939, 940, 942, 943, 944, 946, 950, 955, 968, 969, 971, 972, 973
d:\sources\scummvm\scummvm-jt\audio\softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp(1041): warning C6011: Dereferencing NULL pointer 'o': Lines: 932, 935, 937, 939, 940, 942, 943, 944, 946, 950, 955, 1039, 1041
d:\sources\scummvm\scummvm-jt\audio\softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp(1043): warning C6011: Dereferencing NULL pointer 'c': Lines: 932, 935, 937, 939, 940, 942, 943, 944, 946, 950, 955, 1039, 1041, 1042, 1043

comment:5 by Templier, 8 years ago

Results from the last run (around June 6 2011) are available here: https://gist.github.com/1008034

comment:6 by Templier, 8 years ago

Status: newclosed

comment:7 by digitall, 13 months ago

Component: Audio
Summary: AUDIO: Code analysis warnings AUDIO: Code analysis warnings
Note: See TracTickets for help on using tickets.