• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## Checks performed on abstract interpretation stage
2
3### Physical compatibility of arguments to instructions and actual parameters to methods
4
5This type of checks eliminate rutime problems with undefined bits in integers, truncation issues, etc.
6
7From security point of view, this checks guarantee expected ranges of values in code and absence of handling
8undefined information.
9
10### Access checks
11
12Checks for private/protected/public access rights.
13
14These checks prevent unintended/unexpected access from one method to another.
15Or access to wrong fields of object.
16
17### Checks of subtyping
18
19Checks of compatibility of objects in arguments to instructions and actual parameters to methods.
20
21These checks eliminate calls of methods with incorrect `this`, wrong access to arrays, etc.
22
23### Checks of exception handlers
24
25These checks performed to check correctness of context on exception handler entry.
26
27They can help to detect usage of inconsistent information in registers in exception handlers.
28
29### Checks of exceptions, that can be thrown in runtime
30
31Some code may exibit behavior of permanently throwing of exceptions, like always throwing NPE.
32
33This is definitely not normal mode of control-flow in code, so verifier can detect such situations (when code always throws an exception).
34
35### Check of return values from methods
36
37Can help inconsistency between method signature and type of actual return value
38
39### (todo) Simple range checks of primitive types
40
41These checks help to detect issues with unintended truncation/overflow/underflow etc.
42
43### (todo) Simple bounds checks
44
45These checks help in some cases detect out-of-bounds access type of errors in static.
46
47### (todo) Checks for usage of some functions/intrinsics
48
49For instance, check symmetry of monitorEnter/monitorExit calls to avoid deadlocking.
50