Reviewed By: jeremydubreil Differential Revision: D3826552 fbshipit-source-id: 3b98b76master
parent
30ff9eda22
commit
bcacd95176
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2016 - 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.
|
||||
*/
|
||||
|
||||
package codetoanalyze.java.quandary;
|
||||
|
||||
import com.facebook.infer.models.InferTaint;
|
||||
|
||||
public class Arrays {
|
||||
|
||||
static class Obj {
|
||||
Object f;
|
||||
Object[] arr;
|
||||
}
|
||||
|
||||
/** should report on these tests */
|
||||
|
||||
void viaArrayBad() {
|
||||
Object[] arr = new Object[1];
|
||||
arr[0] = InferTaint.inferSecretSource();
|
||||
InferTaint.inferSensitiveSink(arr[0]);
|
||||
}
|
||||
|
||||
void viaArrayThenFieldBad() {
|
||||
Obj[] arr = new Obj[1];
|
||||
arr[0].f = InferTaint.inferSecretSource();
|
||||
InferTaint.inferSensitiveSink(arr[0].f);
|
||||
}
|
||||
|
||||
void viaFieldThenArrayBad1(Obj obj) {
|
||||
obj.arr[0] = InferTaint.inferSecretSource();
|
||||
InferTaint.inferSensitiveSink(obj.arr[0]);
|
||||
}
|
||||
|
||||
void viaFieldThenArrayBad2() {
|
||||
Obj obj = new Obj();
|
||||
obj.arr = new Obj[1];
|
||||
obj.arr[0] = InferTaint.inferSecretSource();
|
||||
InferTaint.inferSensitiveSink(obj.arr[0]);
|
||||
}
|
||||
|
||||
/** should not report on these tests */
|
||||
|
||||
void viaArrayOk() {
|
||||
Object[] arr = new Object[1];
|
||||
arr[0] = new Object();
|
||||
InferTaint.inferSensitiveSink(arr[0]);
|
||||
}
|
||||
|
||||
void viaArrayThenFieldOk() {
|
||||
Obj[] arr = new Obj[1];
|
||||
arr[0].f = InferTaint.inferSecretSource();
|
||||
InferTaint.inferSensitiveSink(arr[0]);
|
||||
}
|
||||
|
||||
/** false positives: an ideal analysis would not report on these, but we do */
|
||||
|
||||
// we don't track array indices precisely
|
||||
void FP_viaArrayOk1(Object y, Object[] z) {
|
||||
Object[] arr = new Object[2];
|
||||
arr[0] = InferTaint.inferSecretSource();
|
||||
InferTaint.inferSensitiveSink(arr[1]);
|
||||
}
|
||||
|
||||
// we use weak update semantics on arrays
|
||||
void FP_viaArrayOk2(Object y, Object[] z) {
|
||||
Object[] arr = new Object[1];
|
||||
arr[0] = InferTaint.inferSecretSource();
|
||||
arr[0] = null;
|
||||
InferTaint.inferSensitiveSink(arr[0]);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue