2 class \Exception
: { policied_props
= [] }
3 class \HH
\vec
: { policied_props
= [] }
4 class \X
: { policied_props
= [a
:A
, b
:B
] }
5 function \do_not_leak_pc_after_catch
: { kind
= public
}
6 function \leak_pc_in_catch
: { kind
= public
}
7 function
\nested_try
: { kind
= public
}
8 function
\throw_in_catch
: { kind
= public
}
10 Analyzing \leak_pc_in_catch
:
14 * Exception
: \Exception
<\Exception
, lump
>
17 { $e
-> \Exception
<\Exception
'1, lump'2>;
18 $x
-> \X
<\X
, lump
'1, a=<A>, b=<B>> }
23 { $e -> \Exception<\Exception'1, lump
'2>;
24 $exn -> \Exception<\Exception'2, lump
'3>;
25 $x -> \X<\X, lump'1, a
=<A
>, b
=<B
>> }
27 [A
< .a
, \X
< .a
, lump
'2 = lump'3, \Exception
'1 < \Exception'2, \X
< B
,
28 PUBLIC
< B
, .a
< B
, pc
< B
]
30 Analyzing \do_not_leak_pc_after_catch
:
34 * Exception
: \Exception
<\Exception
, lump
>
37 { $e
-> \Exception
<\Exception
'1, lump'2>;
38 $x
-> \X
<\X
, lump
'1, a=<A>, b=<B>> }
43 { $_ -> \Exception<\Exception'2, lump
'3>;
44 $e -> \Exception<\Exception'1, lump
'2>;
45 $x -> \X<\X, lump'1, a
=<A
>, b
=<B
>> }
47 [A
< .a
, \X
< .a
, lump
'2 = lump'3, \Exception
'1 < \Exception'2, \X
< B
,
50 Analyzing
\nested_try
:
54 * Exception
: \Exception
<\Exception
, lump
>
57 { $e
-> \Exception
<\Exception
'1, lump'2>;
58 $x
-> \X
<\X
, lump
'1, a=<A>, b=<B>> }
63 { $_ -> \Exception<\Exception'2, lump
'3>;
64 $e -> \Exception<\Exception'1, lump
'2>;
65 $x -> \X<\X, lump'1, a
=<A
>, b
=<B
>> }
67 [A
< .a
, \X
< .a
, lump
'2 = lump'3, \Exception
'1 < \Exception'2, \X
< B
,
68 PUBLIC
< B
, .a
< B
, pc
< B
]
70 Analyzing
\throw_in_catch
:
74 * Exception
: \Exception
<\Exception
, lump
>
77 { $e
-> \Exception
<\Exception
'1, lump'2>;
78 $x
-> \X
<\X
, lump
'1, a=<A>, b=<B>> }
83 { $_ -> \Exception<\Exception'2, lump
'3>;
84 $e -> \Exception<\Exception'1, lump
'2>;
85 $x -> \X<\X, lump'1, a
=<A
>, b
=<B
>> }
88 [lump
'2 = lump'3, \Exception
'1 < \Exception'2, A
< .a
, \X
< .a
,
89 lump
'2 = lump, \Exception'1 < \Exception
, \X
< B
, PUBLIC
< B
, .a
< B
,
92 Flow constraints
for \do_not_leak_pc_after_catch
:
94 Simplified
: PUBLIC
< B
96 [A
< .a
, \X
< .a
, lump
'2 = lump'3, \Exception
'1 < \Exception'2, \X
< B
,
99 Flow constraints
for \leak_pc_in_catch
:
101 Simplified
: [PUBLIC
< B
, A
< B
]
103 [A
< .a
, \X
< .a
, lump
'2 = lump'3, \Exception
'1 < \Exception'2, \X
< B
,
104 PUBLIC
< B
, .a
< B
, pc
< B
]
106 Flow constraints
for \nested_try
:
108 Simplified
: [PUBLIC
< B
, A
< B
]
110 [A
< .a
, \X
< .a
, lump
'2 = lump'3, \Exception
'1 < \Exception'2, \X
< B
,
111 PUBLIC
< B
, .a
< B
, pc
< B
]
113 Flow constraints
for \throw_in_catch
:
115 Simplified
: [PUBLIC
< B
, A
< B
]
117 [lump
'2 = lump'3, \Exception
'1 < \Exception'2, A
< .a
, \X
< .a
,
118 lump
'2 = lump, \Exception'1 < \Exception
, \X
< B
, PUBLIC
< B
, .a
< B
,
124 There are privacy policy errors in \do_not_leak_pc_after_catch
:
125 Data with policy PUBLIC appears in
context B.
127 There are privacy policy errors in \leak_pc_in_catch
:
128 Data with policy PUBLIC appears in
context B.
129 Data with policy A appears in
context B.
131 There are privacy policy errors in
\nested_try
:
132 Data with policy PUBLIC appears in
context B.
133 Data with policy A appears in
context B.
135 There are privacy policy errors in
\throw_in_catch
:
136 Data with policy PUBLIC appears in
context B.
137 Data with policy A appears in
context B.