1 | // RUN: %clang_analyze_cc1 -analyzer-checker=alpha.unix.Chroot -analyzer-store region -verify %s |
2 | |
3 | extern int chroot(const char* path); |
4 | extern int chdir(const char* path); |
5 | |
6 | void foo(void) { |
7 | } |
8 | |
9 | void f1(void) { |
10 | chroot("/usr/local"); // root changed. |
11 | foo(); // expected-warning {{No call of chdir("/") immediately after chroot}} |
12 | } |
13 | |
14 | void f2(void) { |
15 | chroot("/usr/local"); // root changed. |
16 | chdir("/"); // enter the jail. |
17 | foo(); // no-warning |
18 | } |
19 | |
20 | void f3(void) { |
21 | chroot("/usr/local"); // root changed. |
22 | chdir("../"); // change working directory, still out of jail. |
23 | foo(); // expected-warning {{No call of chdir("/") immediately after chroot}} |
24 | } |
25 | |