Project

General

Profile

Secure Coding Standard » History » Version 12

Andreas Steffen, 28.05.2013 13:21
Finished DCL section

1 1 Andreas Steffen
h1. Secure Coding Standard
2 1 Andreas Steffen
3 7 Andreas Steffen
The strongSwan project adheres to the following recommendations and rules proposed by the "CERT C Secure Coding Standard":https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard:
4 1 Andreas Steffen
5 10 Andreas Steffen
{{>toc}}
6 10 Andreas Steffen
7 1 Andreas Steffen
h2. Preprocessor (PRE)
8 1 Andreas Steffen
9 12 Andreas Steffen
*Full Adherence* 
10 2 Andreas Steffen
11 2 Andreas Steffen
* "PRE03-C. Prefer typedefs to defines for encoding types":https://www.securecoding.cert.org/confluence/display/seccode/PRE03-C.+Prefer+typedefs+to+defines+for+encoding+types
12 2 Andreas Steffen
13 2 Andreas Steffen
* "PRE04-C. Do not reuse a standard header file name":https://www.securecoding.cert.org/confluence/display/seccode/PRE04-C.+Do+not+reuse+a+standard+header+file+name
14 2 Andreas Steffen
15 3 Andreas Steffen
* "PRE06-C. Enclose header files in an inclusion guard":https://www.securecoding.cert.org/confluence/display/seccode/PRE06-C.+Enclose+header+files+in+an+inclusion+guard
16 3 Andreas Steffen
17 4 Andreas Steffen
* "PRE09-C. Do not replace secure functions with deprecated or obsolescent functions":https://www.securecoding.cert.org/confluence/display/seccode/PRE09-C.+Do+not+replace+secure+functions+with+deprecated+or+obsolescent+functions
18 4 Andreas Steffen
19 12 Andreas Steffen
*Partial Adherence*
20 2 Andreas Steffen
21 2 Andreas Steffen
* "PRE00-C. Prefer inline or static functions to function-like macros ":https://www.securecoding.cert.org/confluence/display/seccode/PRE00-C.+Prefer+inline+or+static+functions+to+function-like+macros
22 2 Andreas Steffen
23 2 Andreas Steffen
* "PRE01-C. Use parentheses within macros around parameter names":https://www.securecoding.cert.org/confluence/display/seccode/PRE01-C.+Use+parentheses+within+macros+around+parameter+names
24 2 Andreas Steffen
25 2 Andreas Steffen
* "PRE02-C. Macro replacement lists should be parenthesized":https://www.securecoding.cert.org/confluence/display/seccode/PRE02-C.+Macro+replacement+lists+should+be+parenthesized
26 3 Andreas Steffen
27 12 Andreas Steffen
*Check Adherence*
28 3 Andreas Steffen
29 3 Andreas Steffen
* "PRE05-C. Understand macro replacement when concatenating tokens or performing stringification":https://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification
30 3 Andreas Steffen
31 1 Andreas Steffen
* "PRE07-C. Avoid using repeated question marks":https://www.securecoding.cert.org/confluence/display/seccode/PRE07-C.+Avoid+using+repeated+question+marks
32 4 Andreas Steffen
33 4 Andreas Steffen
* "PRE10-C. Wrap multistatement macros in a do-while loop":https://www.securecoding.cert.org/confluence/display/seccode/PRE10-C.+Wrap+multistatement+macros+in+a+do-while+loop
34 4 Andreas Steffen
35 4 Andreas Steffen
* "PRE11-C. Do not conclude macro definitions with a semicolon ":https://www.securecoding.cert.org/confluence/display/seccode/PRE11-C.+Do+not+conclude+macro+definitions+with+a+semicolon
36 4 Andreas Steffen
37 4 Andreas Steffen
* "PRE12-C. Do not define unsafe macros":https://www.securecoding.cert.org/confluence/display/seccode/PRE12-C.+Do+not+define+unsafe+macros
38 4 Andreas Steffen
39 4 Andreas Steffen
* "PRE30-C. Do not create a universal character name through concatenation":https://www.securecoding.cert.org/confluence/display/seccode/PRE30-C.+Do+not+create+a+universal+character+name+through+concatenation
40 4 Andreas Steffen
41 4 Andreas Steffen
* "PRE31-C. Avoid side-effects in arguments to unsafe macros":https://www.securecoding.cert.org/confluence/display/seccode/PRE31-C.+Avoid+side-effects+in+arguments+to+unsafe+macros
42 4 Andreas Steffen
43 4 Andreas Steffen
* "PRE32-C. Do not use preprocessor directives inside macro arguments":https://www.securecoding.cert.org/confluence/display/seccode/PRE32-C.+Do+not+use+preprocessor+directives+inside+macro+arguments
44 3 Andreas Steffen
45 12 Andreas Steffen
*No Adherence*
46 3 Andreas Steffen
47 3 Andreas Steffen
* "PRE08-C. Guarantee that header file names are unique":https://www.securecoding.cert.org/confluence/display/seccode/PRE08-C.+Guarantee+that+header+file+names+are+unique
48 2 Andreas Steffen
49 1 Andreas Steffen
h2. Declarations and Initialization (DCL)
50 1 Andreas Steffen
51 12 Andreas Steffen
*Full Adherence* 
52 6 Andreas Steffen
53 6 Andreas Steffen
* "DCL01-C. Do not reuse variable names in subscopes":https://www.securecoding.cert.org/confluence/display/seccode/DCL01-C.+Do+not+reuse+variable+names+in+subscopes
54 6 Andreas Steffen
55 6 Andreas Steffen
* "DCL02-C. Use visually distinct identifiers":https://www.securecoding.cert.org/confluence/display/seccode/DCL02-C.+Use+visually+distinct+identifiers
56 6 Andreas Steffen
57 8 Andreas Steffen
* "DCL05-C. Use typedefs to improve code readability":https://www.securecoding.cert.org/confluence/display/seccode/DCL05-C.+Use+typedefs+to+improve+code+readability
58 8 Andreas Steffen
59 8 Andreas Steffen
* "DCL07-C. Include the appropriate type information in function declarators":https://www.securecoding.cert.org/confluence/display/seccode/DCL07-C.+Include+the+appropriate+type+information+in+function+declarators
60 8 Andreas Steffen
61 8 Andreas Steffen
* "DCL12-C. Implement abstract data types using opaque types":https://www.securecoding.cert.org/confluence/display/seccode/DCL12-C.+Implement+abstract+data+types+using+opaque+types
62 8 Andreas Steffen
63 8 Andreas Steffen
* "DCL15-C. Declare file-scope objects or functions that do not need external linkage as static":https://www.securecoding.cert.org/confluence/display/seccode/DCL15-C.+Declare+file-scope+objects+or+functions+that+do+not+need+external+linkage+as+static
64 8 Andreas Steffen
65 8 Andreas Steffen
* "DCL18-C. Do not begin integer constants with 0 when specifying a decimal value":https://www.securecoding.cert.org/confluence/display/seccode/DCL18-C.+Do+not+begin+integer+constants+with+0+when+specifying+a+decimal+value
66 8 Andreas Steffen
67 8 Andreas Steffen
* "DCL31-C. Declare identifiers before using them":https://www.securecoding.cert.org/confluence/display/seccode/DCL31-C.+Declare+identifiers+before+using+them
68 8 Andreas Steffen
69 1 Andreas Steffen
* "DCL35-C. Call functions with the correct number and type of arguments":https://www.securecoding.cert.org/confluence/display/seccode/DCL35-C.+Call+functions+with+the+correct+number+and+type+of+arguments
70 1 Andreas Steffen
71 1 Andreas Steffen
* "DCL36-C. Do not declare an identifier with conflicting linkage classifications":https://www.securecoding.cert.org/confluence/display/seccode/DCL36-C.+Do+not+declare+an+identifier+with+conflicting+linkage+classifications
72 1 Andreas Steffen
73 12 Andreas Steffen
* "DCL38-C. Use the correct syntax when declaring flexible array members":https://www.securecoding.cert.org/confluence/display/seccode/DCL38-C.+Use+the+correct+syntax+when+declaring+flexible+array+members
74 11 Andreas Steffen
75 12 Andreas Steffen
* "DCL40-C. Incompatible declarations of the same function or object":https://www.securecoding.cert.org/confluence/display/seccode/DCL40-C.+Incompatible+declarations+of+the+same+function+or+object
76 12 Andreas Steffen
77 12 Andreas Steffen
*Partial Adherence*
78 12 Andreas Steffen
79 8 Andreas Steffen
* "DCL06-C. Use meaningful symbolic constants to represent literal values":https://www.securecoding.cert.org/confluence/display/seccode/DCL06-C.+Use+meaningful+symbolic+constants+to+represent+literal+values
80 8 Andreas Steffen
81 8 Andreas Steffen
* "DCL19-C. Minimize the scope of variables and functions":https://www.securecoding.cert.org/confluence/display/seccode/DCL19-C.+Minimize+the+scope+of+variables+and+functions
82 8 Andreas Steffen
83 8 Andreas Steffen
* "DCL20-C. Always specify void even if a function accepts no arguments":https://www.securecoding.cert.org/confluence/display/seccode/DCL20-C.+Always+specify+void+even+if+a+function+accepts+no+arguments
84 8 Andreas Steffen
85 12 Andreas Steffen
*Check Adherence*
86 8 Andreas Steffen
87 8 Andreas Steffen
* "DCL08-C. Properly encode relationships in constant definitions":https://www.securecoding.cert.org/confluence/display/seccode/DCL08-C.+Properly+encode+relationships+in+constant+definitions
88 8 Andreas Steffen
89 8 Andreas Steffen
* "DCL09-C. Declare functions that return errno with a return type of errno_t":https://www.securecoding.cert.org/confluence/display/seccode/DCL09-C.+Declare+functions+that+return+errno+with+a+return+type+of+errno_t
90 8 Andreas Steffen
91 8 Andreas Steffen
* "DCL10-C. Maintain the contract between the writer and caller of variadic functions":https://www.securecoding.cert.org/confluence/display/seccode/DCL10-C.+Maintain+the+contract+between+the+writer+and+caller+of+variadic+functions
92 8 Andreas Steffen
93 8 Andreas Steffen
* "DCL11-C. Understand the type issues associated with variadic functions":https://www.securecoding.cert.org/confluence/display/seccode/DCL11-C.+Understand+the+type+issues+associated+with+variadic+functions
94 8 Andreas Steffen
95 9 Andreas Steffen
* "DCL16-C. Use 'L,' not 'l,' to indicate a long value":https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=19759250
96 8 Andreas Steffen
97 8 Andreas Steffen
* "DCL17-C. Beware of miscompiled volatile-qualified variables":https://www.securecoding.cert.org/confluence/display/seccode/DCL17-C.+Beware+of+miscompiled+volatile-qualified+variables
98 8 Andreas Steffen
99 1 Andreas Steffen
* "DCL21-C. Understand the storage of compound literals":https://www.securecoding.cert.org/confluence/display/seccode/DCL21-C.+Understand+the+storage+of+compound+literals
100 1 Andreas Steffen
101 1 Andreas Steffen
* "DCL30-C. Declare objects with appropriate storage durations":https://www.securecoding.cert.org/confluence/display/seccode/DCL30-C.+Declare+objects+with+appropriate+storage+durations
102 8 Andreas Steffen
103 8 Andreas Steffen
* "DCL34-C. Use volatile for data that cannot be cached":https://www.securecoding.cert.org/confluence/display/seccode/DCL34-C.+Use+volatile+for+data+that+cannot+be+cached
104 8 Andreas Steffen
105 8 Andreas Steffen
* "DCL37-C. Do not declare or define a reserved identifier":https://www.securecoding.cert.org/confluence/display/seccode/DCL37-C.+Do+not+declare+or+define+a+reserved+identifier
106 11 Andreas Steffen
107 12 Andreas Steffen
* "DCL39-C. Avoid information leak in structure padding":https://www.securecoding.cert.org/confluence/display/seccode/DCL39-C.+Avoid+information+leak+in+structure+padding
108 12 Andreas Steffen
109 12 Andreas Steffen
*No Adherence*
110 6 Andreas Steffen
111 6 Andreas Steffen
* "DCL00-C. Const-qualify immutable objects":https://www.securecoding.cert.org/confluence/display/seccode/DCL00-C.+Const-qualify+immutable+objects
112 6 Andreas Steffen
113 6 Andreas Steffen
* "DCL03-C. Use a static assertion to test the value of a constant expression":https://www.securecoding.cert.org/confluence/display/seccode/DCL03-C.+Use+a+static+assertion+to+test+the+value+of+a+constant+expression
114 8 Andreas Steffen
115 8 Andreas Steffen
* "DCL04-C. Do not declare more than one variable per declaration":https://www.securecoding.cert.org/confluence/display/seccode/DCL04-C.+Do+not+declare+more+than+one+variable+per+declaration
116 8 Andreas Steffen
117 8 Andreas Steffen
* "DCL13-C. Declare function parameters that are pointers to values not changed by the function as const ":https://www.securecoding.cert.org/confluence/display/seccode/DCL13-C.+Declare+function+parameters+that+are+pointers+to+values+not+changed+by+the+function+as+const
118 8 Andreas Steffen
119 8 Andreas Steffen
* "DCL32-C. Guarantee that mutually visible identifiers are unique":https://www.securecoding.cert.org/confluence/display/seccode/DCL32-C.+Guarantee+that+mutually+visible+identifiers+are+unique
120 6 Andreas Steffen
121 1 Andreas Steffen
h2. Expressions (EXP)
122 1 Andreas Steffen
123 1 Andreas Steffen
h2. Integers (INT)
124 1 Andreas Steffen
125 1 Andreas Steffen
h2. Floating Point (FLP)
126 1 Andreas Steffen
127 1 Andreas Steffen
h2. Arrays (ARR)
128 1 Andreas Steffen
129 1 Andreas Steffen
h2. Characters and Strings (STR)
130 1 Andreas Steffen
131 1 Andreas Steffen
h2. Memory Management (MEM)
132 1 Andreas Steffen
133 1 Andreas Steffen
h2. Input Output (FIO)
134 1 Andreas Steffen
135 1 Andreas Steffen
h2. Environment (ENV)
136 1 Andreas Steffen
137 1 Andreas Steffen
h2. Signals (SIG)
138 1 Andreas Steffen
139 1 Andreas Steffen
h2. Error Handling (ERR)
140 1 Andreas Steffen
141 1 Andreas Steffen
h2. Application Programming Interfaces (API)
142 1 Andreas Steffen
143 1 Andreas Steffen
h2. Concurrency (CON)
144 1 Andreas Steffen
145 1 Andreas Steffen
h2. Miscellaneous (MSC)
146 1 Andreas Steffen
147 1 Andreas Steffen
h2. POSIX (POS)