/* * Copyright (c) 2017 - present Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ class my_class { int idx; int arr[10]; void set_a(int n) { idx = n; } int id(int n) { return n; } public: int access_Bad() { set_a(10); return arr[idx]; } int access2_Bad() { int n = 10; return arr[id(n)]; } int access_nth(int n) { return arr[n]; } }; void access_after_new_Good() { my_class* x = new my_class(); x->access_nth(5); } void access_after_new_Bad() { my_class* x = new my_class(); x->access_nth(15); } #include class my_class2 { public: int a[5]; }; void array_member_malloc_Good() { my_class2* x = (my_class2*)malloc(sizeof(my_class2)); x->a[0] = 0; } void array_member_malloc_Bad() { my_class2* x = (my_class2*)malloc(sizeof(my_class2)); x->a[10] = 0; } class my_class3 { public: my_class2 b; }; void array_member_malloc2_Bad() { my_class3* x = (my_class3*)malloc(sizeof(my_class3)); x->b.a[10] = 0; } #include void placement_new_Good() { char* mem = (char*)malloc(sizeof(my_class2)); my_class2* x = new (mem) my_class2(); x->a[0] = 0; } void placement_new_Bad() { char* mem = (char*)malloc(sizeof(my_class2)); my_class2* x = new (mem) my_class2(); x->a[10] = 0; }