File: Demo.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (38 lines) | stat: -rw-r--r-- 1,057 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.LinkedList;
import java.util.List;
import qual.Encrypted;

abstract class EncryptionDemo {

    public @Encrypted String encrypt(String text) {
        byte[] b = text.getBytes();
        for (int i = 0; i < b.length; b[i++]++) {
            // side effect is in increment expression of for loop
        }
        // :: warning: (cast.unsafe)
        return (@Encrypted String) new String(b);
    }

    // Only send encrypted data!
    abstract void sendOverTheInternet(@Encrypted String msg);

    void sendText() {
        @Encrypted String s = encrypt("foo"); // valid
        sendOverTheInternet(s); // valid

        String t = encrypt("bar"); // valid (subtype)
        sendOverTheInternet(t); // valid (flow)

        List<@Encrypted String> lst = new LinkedList<@Encrypted String>();
        lst.add(s);
        lst.add(t);

        for (String str : lst) // valid
        sendOverTheInternet(str);
    }

    void sendPassword() {
        String password = "unencrypted";
        sendOverTheInternet(password); // invalid
    }
}