/* * 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. */ void init(int* i) { *i = 10; } void init_bool(bool* i) { *i = false; } void no_init(int* i) {} void no_init_bool(bool* i) {} int inc(int x) { return x + 1; } // error is detected before call as we copy x // so no need to put it in the summary int no_init_return_bad() { int x; return x; // error } int bad1() { int a; int b = a; // Error int c = b; // Error but we do not report as it depends from line 20 return c; } int ok1() { int a; int b; no_init(&a); b = a; // OK (only intraprocedural) return b; } int ok2() { int a; int c; no_init(&a); c = inc(a); // OK (only intraprocedural) return c; } int ok3() { int a; int c; init(&a); c = a; // OK return c; } int ok4() { int a; int c; init(&a); c = inc(a); // ok return c; } int ok5() { int a; int b; int c; no_init(&a); b = a; // ok (only intraprocedural) c = inc(b); // do not report as it depends from line 31 return c; } void square_init(int x, int& res) { res = x * x; } int square_no_init(int x, int& res) { return res * res; } void use_square_ok1() { int i; square_init(2, i); } int use_square_ok2() { int i; i = square_no_init(2, i); // OK only intraprocedural return i; } bool getOK(void); int branch1_FP() { int size; bool ok = getOK(); if (ok) { size = 1; } if (ok) { return size; } return 0; } int loop1_FP() { int size; for (;;) { size = 1; if (getOK()) break; } return size; } int ok6() { int x; x = 7; return x; } // this crashes HIL if we're not careful void deref_magic_addr_ok() { *(int*)0xdeadbeef = 0; } char ok7() { char buf[1024], *res = buf; res[1] = 'a'; return res[1]; }