You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.5 KiB

(*
* 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.
*)
open! IStd
module F = Format
module L = Logging
include
TaintAnalysis.Make(struct
module Trace = JavaTrace
let to_summary_trace trace = QuandarySummary.Java trace
let of_summary_trace = function
| QuandarySummary.Java trace -> trace
| _ -> assert false
let handle_unknown_call pname ret_typ_opt =
match pname with
| (Procname.Java java_pname) as pname ->
begin
match Procname.java_get_class_name java_pname,
Procname.java_get_method java_pname,
ret_typ_opt with
| _ when Procname.is_constructor pname ->
[TaintSpec.Propagate_to_receiver]
| ("java.lang.StringBuffer" | "java.lang.StringBuilder" | "java.util.Formatter"), _,
Some _
when not (Procname.java_is_static pname) ->
[TaintSpec.Propagate_to_receiver; TaintSpec.Propagate_to_return]
| _, _, Some _ ->
[TaintSpec.Propagate_to_return]
| _ ->
[]
end
| pname when BuiltinDecl.is_declared pname ->
[]
| pname ->
failwithf "Non-Java procname %a in Java analysis@." Procname.pp pname
end)