@@ -50,126 +50,126 @@ int main(int argc, char **argv) {
5050 std::cout << " Usage: main_address_sanitize <choice>" << std::endl;
5151 return -1 ;
5252 }
53-
53+ std::cout << argv[ 1 ] << std::endl;
5454 int choice = std::stoi (argv[1 ]);
5555 std::cout << " choice: " << choice << std::endl;
5656
5757 switch (choice) {
58- case 0 : {
59- // SEGV on unknown address.
60- char *ptr = nullptr ;
61- *ptr = 5 ;
62- break ;
63- }
58+ case 0 : {
59+ // SEGV on unknown address.
60+ char *ptr = nullptr ;
61+ *ptr = 5 ;
62+ break ;
63+ }
6464
65- case 1 : {
66- // SEGV on unknown address.
67- char *ptr = (char *)1 ;
68- *ptr = 5 ;
69- break ;
70- }
65+ case 1 : {
66+ // SEGV on unknown address.
67+ char *ptr = (char *)1 ;
68+ *ptr = 5 ;
69+ break ;
70+ }
7171
72- case 2 : {
73- // SEGV on unknown address.
74- std::vector<char > v;
75- std::cout << v[100 ] << std::endl;
76- break ;
77- }
72+ case 2 : {
73+ // SEGV on unknown address.
74+ std::vector<char > v;
75+ std::cout << v[100 ] << std::endl;
76+ break ;
77+ }
7878
79- case 3 : {
80- // Heap buffer overflow (Example 1).
81- std::vector<char > v (1 );
82- std::cout << v[100 ] << std::endl;
83- break ;
84- }
79+ case 3 : {
80+ // Heap buffer overflow (Example 1).
81+ std::vector<char > v (1 );
82+ std::cout << v[100 ] << std::endl;
83+ break ;
84+ }
8585
86- case 4 : {
87- // Heap buffer overflow (Example 2).
88- char *array = new char [16 ];
89- array[16 ] = 1 ; // BOOM!
90- break ;
91- }
86+ case 4 : {
87+ // Heap buffer overflow (Example 2).
88+ char *array = new char [16 ];
89+ array[16 ] = 1 ; // BOOM!
90+ break ;
91+ }
9292
93- case 5 : {
94- // Heap buffer overflow (Example 3).
95- char *ptr = new char ;
96- *ptr = ' a' ;
97- std::cout << *(ptr + 1 ) << std::endl;
98- break ;
99- }
93+ case 5 : {
94+ // Heap buffer overflow (Example 3).
95+ char *ptr = new char ;
96+ *ptr = ' a' ;
97+ std::cout << *(ptr + 1 ) << std::endl;
98+ break ;
99+ }
100100
101- case 6 : {
102- // Heap use after free.
103- char *p = new char ;
104- delete p;
105- std::cout << *p << std::endl;
106- break ;
107- }
101+ case 6 : {
102+ // Heap use after free.
103+ char *p = new char ;
104+ delete p;
105+ std::cout << *p << std::endl;
106+ break ;
107+ }
108108
109- case 7 : {
110- // Double-free.
111- char *p = new char ;
112- delete p;
113- delete p;
114- break ;
115- }
109+ case 7 : {
110+ // Double-free.
111+ char *p = new char ;
112+ delete p;
113+ delete p;
114+ break ;
115+ }
116116
117- case 8 : {
118- // Stack buffer overflow.
119- char array[16 ];
120- array[20 ] = 1 ; // BOOM!
121- break ;
122- }
117+ case 8 : {
118+ // Stack buffer overflow.
119+ char array[16 ];
120+ array[20 ] = 1 ; // BOOM!
121+ break ;
122+ }
123123
124- case 9 : {
125- // stack-use-after-scope
126- volatile char *ptr = nullptr ;
127- {
128- char x = 0 ;
129- ptr = &x;
130- }
131- *ptr = 5 ;
132- break ;
133- }
134- case 10 : {
135- // stack-use-after-return
136- // Set this env variable before running:
137- // export ASAN_OPTIONS=detect_stack_use_after_return=1
138- FunctionThatEscapesLocalObject ();
139- return global_ptr[0 ];
124+ case 9 : {
125+ // stack-use-after-scope
126+ volatile char *ptr = nullptr ;
127+ {
128+ char x = 0 ;
129+ ptr = &x;
140130 }
131+ *ptr = 5 ;
132+ break ;
133+ }
134+ case 10 : {
135+ // stack-use-after-return
136+ // Set this env variable before running:
137+ // export ASAN_OPTIONS=detect_stack_use_after_return=1
138+ FunctionThatEscapesLocalObject ();
139+ return global_ptr[0 ];
140+ }
141141
142- case 11 : {
143- // global-buffer-overflow
144- // char global_array[10]; // global variable.
145- global_array[11 ] = 1 ; // Boom!
146- break ;
147- }
142+ case 11 : {
143+ // global-buffer-overflow
144+ // char global_array[10]; // global variable.
145+ global_array[11 ] = 1 ; // Boom!
146+ break ;
147+ }
148148
149- case 12 : {
150- // global-buffer-overflow
151- static char array[10 ];
152- array[11 ] = 1 ; // Boom!
153- break ;
154- }
149+ case 12 : {
150+ // global-buffer-overflow
151+ static char array[10 ];
152+ array[11 ] = 1 ; // Boom!
153+ break ;
154+ }
155155
156- case 13 : {
157- // Leak detection (Doesn't work on Mac?)
158- // Set this env variable before running:
159- // export ASAN_OPTIONS=detect_leaks=1
160- // Or with bazel:
161- /*
162- bazel run --config=asan //src/main:main_address_sanitize \
163- --run_under='export ASAN_OPTIONS=detect_leaks=1 &&' -- 13
164- */
165- char *p = new char ;
166- *p = 10 ;
167- std::cout << " *p: " << *p << std::endl;
168- break ;
169- }
156+ case 13 : {
157+ // Leak detection (Doesn't work on Mac?)
158+ // Set this env variable before running:
159+ // export ASAN_OPTIONS=detect_leaks=1
160+ // Or with bazel:
161+ /*
162+ bazel run --config=asan //src/main:main_address_sanitize \
163+ --run_under='export ASAN_OPTIONS=detect_leaks=1 &&' -- 13
164+ */
165+ char *p = new char ;
166+ *p = 10 ;
167+ std::cout << " *p: " << *p << std::endl;
168+ break ;
169+ }
170170
171- default :
172- std::cout << " Error: Invalid choice value: " << choice << std::endl;
171+ default :
172+ std::cout << " Error: Invalid choice value: " << choice << std::endl;
173173 }
174174
175175 return 0 ;
0 commit comments