|
From: NoName on 11 Apr 2008 21:30 Lesson 1, Identified 4 weaknesses. Lesson 2, Identifies 16 weaknesses. (Think positive: at least the compiler, compiles, and the linker, links, which cannot be said for competing products of competitors.) See comments or see website for code/zips: http://members.home.nl/hbthouppermans/VS2008Analysis/Index.htm // *** Begin of Main.cpp *** #include <stdio.h> typedef char int8; typedef short int int16; typedef int int32; typedef long long int64; typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef unsigned long long uint64; /* 12 april 2008 Back to School: Lesson 2, Integer Range Checking. Conclusions: Underflow for int8 not detected, BAD Overflow for int8 not detected, BAD Underflow for uint8 not detected, BAD Overflow for uint8 not detected, BAD Underflow for int16 not detected, BAD Overflow for int16 not detected, BAD Underflow for uint16 not detected, BAD Overflow for uint16 not detected, BAD Underflow for int32 not detected, BAD Overflow for int32 not detected, BAD Underflow for uint32 not detected, BAD Overflow for uint32 not detected, BAD Underflow for int64 not detected, BAD Overflow for int64 not detected, BAD Underflow for uint64 not detected, BAD Overflow for uint64 not detected, BAD 16 out of 16 tests failed. Score: 0 out of 10 */ int main() { printf("Program Started \n\n"); int8 vMinInt8; int8 vMaxInt8; uint8 vMinUint8; uint8 vMaxUint8; int16 vMinInt16; int16 vMaxInt16; uint16 vMinUint16; uint16 vMaxUint16; int32 vMinInt32; int32 vMaxInt32; uint32 vMinUint32; uint32 vMaxUint32; int64 vMinInt64; int64 vMaxInt64; uint64 vMinUint64; uint64 vMaxUint64; // test int8 vMinInt8 = -128; vMinInt8 = vMinInt8 - 1; // Underflow not detected, BAD printf("vMinInt8: %d \n", vMinInt8 ); vMaxInt8 = 127; vMaxInt8 = vMaxInt8 + 1; // Overflow not detected, BAD printf("vMaxInt8: %d \n\n", vMaxInt8 ); // test uint8 vMinUint8 = 0; vMinUint8 = vMinUint8 - 1; // Underflow not detected, BAD printf("vMinUint8: %u \n", vMinUint8 ); vMaxUint8 = 255; vMaxUint8 = vMaxUint8 + 1; // Overflow not detected, BAD printf("vMaxUint8: %u \n\n", vMaxUint8 ); // test int16 vMinInt16 = -32768; vMinInt16 = vMinInt16 - 1; // Underflow not detected, BAD printf("vMinInt16: %d \n", vMinInt16 ); vMaxInt16 = 32767; vMaxInt16 = vMaxInt16 + 1; // Overflow not detected, BAD printf("vMaxInt16: %d \n\n", vMaxInt16 ); // test uint16 vMinUint16 = 0; vMinUint16 = vMinUint16 - 1; // Underflow not detected, BAD printf("vMinUint16: %u \n", vMinUint16 ); vMaxUint16 = 65535; vMaxUint16 = vMaxUint16 + 1; // Overflow not detected, BAD printf("vMaxUint16: %u \n\n", vMaxUint16 ); // test int32 vMinInt32 = 2147483648; // same as -2147483648, solves warning, <- weakness in language. vMinInt32 = vMinInt32 - 1; // Underflow not detected, BAD printf("vMinInt32: %d \n", vMinInt32 ); vMaxInt32 = 2147483647; vMaxInt32 = vMaxInt32 + 1; // Overflow not detected, BAD printf("vMaxInt32: %d \n\n", vMaxInt32 ); // test uint32 vMinUint32 = 0; vMinUint32 = vMinUint32 - 1; // Underflow not detected, BAD printf("vMinUint32: %u \n", vMinUint32 ); vMaxUint32 = 4294967295; vMaxUint32 = vMaxUint32 + 1; // Overflow not detected, BAD printf("vMaxUint32: %u \n\n", vMaxUint32 ); // test int64 vMinInt64 = 9223372036854775808; // same as -9223372036854775808, solves warning, <- weakness in language vMinInt64 = vMinInt64 - 1; // Underflow not detected, BAD printf("vMinInt64: %lld \n", vMinInt64 ); vMaxInt64 = 9223372036854775807; // 9223372036854775808 would give no warning ?!?!, BAD vMaxInt64 = vMaxInt64 + 1; // Overflow not detected, BAD printf("vMaxInt64: %lld \n\n", vMaxInt64 ); // test uint64 vMinUint64 = 0; vMinUint64 = vMinUint64 - 1; // Underflow not detected, BAD printf("vMinUint64: %llu \n", vMinUint64 ); vMaxUint64 = 18446744073709551615; vMaxUint64 = vMaxUint64 + 1; // Overflow not detected, BAD printf("vMaxUint64: %llu \n\n", vMaxUint64 ); printf("Program finished \n"); } // *** End of Main.cpp ***
From: Ulrich Eckhardt on 14 Apr 2008 01:55 NoName wrote: > typedef char int8; Check CHAR_BITS before making such claims. > Conclusions: > > Underflow for int8 not detected, BAD > Overflow for int8 not detected, BAD Underflow or overflow of signed integers causes 'undefined behaviour', i.e. the standard doesn't make any requirements for it. Some compilers even use this knowledge in order to optimise code. > vMinInt32 = 2147483648; // same as -2147483648, solves warning, > <- weakness in language. Ahem, you really mean that x equals -x? You should look up the meaning of suffixes like U or L to numeric literals. BTW: if you actually have a question, you should state that. Uli
From: Richard Heathfield on 14 Apr 2008 03:02 Ulrich Eckhardt said: > NoName wrote: >> typedef char int8; > > Check CHAR_BITS before making such claims. Of course you mean CHAR_BIT But what makes you think he'll listen? Even if you don't recognise the similarity of style between this guy and "Skybuck Flying", take a look at his article headers and then check the article headers for recent articles by "Skybuck Flying". Look, particularly, at the Path header. Notice any similarities? -- Richard Heathfield <http://www.cpax.org.uk> Email: -http://www. +rjh@ Google users: <http://www.cpax.org.uk/prg/writings/googly.php> "Usenet is a strange place" - dmr 29 July 1999
From: TheDevil on 14 Apr 2008 19:09 If you have a fix let me know. Otherwise stop wasting my time.
From: Ulrich Eckhardt on 15 Apr 2008 17:05 Richard Heathfield wrote: > But what makes you think he'll listen? Even if you don't recognise the > similarity of style between this guy and "Skybuck Flying", take a look at > his article headers and then check the article headers for recent articles > by "Skybuck Flying". Ah, hadn't read the previous thread. Thank you, Richard! Uli
|
Pages: 1 Prev: Point to a two-dimension array Next: VS2008 Editor Freezes, Can only add text, not remove ??? |