Replace CRC module with Digest.

Reviewed By: jberdine

Differential Revision: D2906134

fb-gh-sync-id: 08dd19f
master
Cristiano Calcagno 9 years ago committed by facebook-github-bot-5
parent 3ece750c15
commit d31b041fba

@ -1,62 +0,0 @@
(*
* Copyright (c) 2009 - 2013 Monoidics ltd.
* Copyright (c) 2013 - 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.
*)
let vecH = [|
0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81;
0x40; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0;
0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01;
0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01; 0xC0; 0x80; 0x41;
0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81;
0x40; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01; 0xC0;
0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01;
0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40;
0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81;
0x40; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0;
0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01;
0xC0; 0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41;
0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81;
0x40; 0x01; 0xC0; 0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0;
0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01;
0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81; 0x40; 0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41;
0x00; 0xC1; 0x81; 0x40; 0x01; 0xC0; 0x80; 0x41; 0x01; 0xC0; 0x80; 0x41; 0x00; 0xC1; 0x81;
0x40 |]
let vecL = [|
0x00; 0xC0; 0xC1; 0x01; 0xC3; 0x03; 0x02; 0xC2; 0xC6; 0x06; 0x07; 0xC7; 0x05; 0xC5; 0xC4;
0x04; 0xCC; 0x0C; 0x0D; 0xCD; 0x0F; 0xCF; 0xCE; 0x0E; 0x0A; 0xCA; 0xCB; 0x0B; 0xC9; 0x09;
0x08; 0xC8; 0xD8; 0x18; 0x19; 0xD9; 0x1B; 0xDB; 0xDA; 0x1A; 0x1E; 0xDE; 0xDF; 0x1F; 0xDD;
0x1D; 0x1C; 0xDC; 0x14; 0xD4; 0xD5; 0x15; 0xD7; 0x17; 0x16; 0xD6; 0xD2; 0x12; 0x13; 0xD3;
0x11; 0xD1; 0xD0; 0x10; 0xF0; 0x30; 0x31; 0xF1; 0x33; 0xF3; 0xF2; 0x32; 0x36; 0xF6; 0xF7;
0x37; 0xF5; 0x35; 0x34; 0xF4; 0x3C; 0xFC; 0xFD; 0x3D; 0xFF; 0x3F; 0x3E; 0xFE; 0xFA; 0x3A;
0x3B; 0xFB; 0x39; 0xF9; 0xF8; 0x38; 0x28; 0xE8; 0xE9; 0x29; 0xEB; 0x2B; 0x2A; 0xEA; 0xEE;
0x2E; 0x2F; 0xEF; 0x2D; 0xED; 0xEC; 0x2C; 0xE4; 0x24; 0x25; 0xE5; 0x27; 0xE7; 0xE6; 0x26;
0x22; 0xE2; 0xE3; 0x23; 0xE1; 0x21; 0x20; 0xE0; 0xA0; 0x60; 0x61; 0xA1; 0x63; 0xA3; 0xA2;
0x62; 0x66; 0xA6; 0xA7; 0x67; 0xA5; 0x65; 0x64; 0xA4; 0x6C; 0xAC; 0xAD; 0x6D; 0xAF; 0x6F;
0x6E; 0xAE; 0xAA; 0x6A; 0x6B; 0xAB; 0x69; 0xA9; 0xA8; 0x68; 0x78; 0xB8; 0xB9; 0x79; 0xBB;
0x7B; 0x7A; 0xBA; 0xBE; 0x7E; 0x7F; 0xBF; 0x7D; 0xBD; 0xBC; 0x7C; 0xB4; 0x74; 0x75; 0xB5;
0x77; 0xB7; 0xB6; 0x76; 0x72; 0xB2; 0xB3; 0x73; 0xB1; 0x71; 0x70; 0xB0; 0x50; 0x90; 0x91;
0x51; 0x93; 0x53; 0x52; 0x92; 0x96; 0x56; 0x57; 0x97; 0x55; 0x95; 0x94; 0x54; 0x9C; 0x5C;
0x5D; 0x9D; 0x5F; 0x9F; 0x9E; 0x5E; 0x5A; 0x9A; 0x9B; 0x5B; 0x99; 0x59; 0x58; 0x98; 0x88;
0x48; 0x49; 0x89; 0x4B; 0x8B; 0x8A; 0x4A; 0x4E; 0x8E; 0x8F; 0x4F; 0x8D; 0x4D; 0x4C; 0x8C;
0x44; 0x84; 0x85; 0x45; 0x87; 0x47; 0x46; 0x86; 0x82; 0x42; 0x43; 0x83; 0x41; 0x81; 0x80;
0x40 |]
let compute_crc16 s cc =
let h = ref 0xFF in
let l = ref 0xFF in
for n = 0 to cc - 1 do
let i = !h lxor Char.code (s.[n]) in
h := !l lxor vecH.(i);
l := vecL.(i)
done;
Printf.sprintf "%02X%02X" !h !l
let crc16 s =
compute_crc16 s (String.length s)

@ -1,11 +0,0 @@
(*
* Copyright (c) 2009 - 2013 Monoidics ltd.
* Copyright (c) 2013 - 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.
*)
val crc16 : string -> string

@ -98,18 +98,7 @@ let source_file_encoding source_file =
| Enc_crc ->
let base = Filename.basename source_file_s in
let dir = Filename.dirname source_file_s in
let crc = CRC.crc16 dir in
base ^ "." ^ crc
(** covert a long filename to a short ones by truncating the name and adding a hash *)
let get_short_filename filename =
let cutoff_length = 100 in (** if longer than cutoff, cut it and append CRC *)
let name_up_to_cutoff =
if String.length filename <= cutoff_length
then filename
else String.sub filename 0 cutoff_length in
let crc_str = CRC.crc16 filename in
name_up_to_cutoff ^ ":" ^ crc_str
string_append_crc_cutoff ~key:dir base
let source_file_empty = Absolute ""
@ -129,7 +118,7 @@ let source_dir_to_string source_dir = source_dir
(** get the path to an internal file with the given extention (.cfg, .cg, .tenv) *)
let source_dir_get_internal_file source_dir extension =
let source_dir_name =
get_short_filename (Filename.chop_extension (Filename.basename source_dir)) in
string_append_crc_cutoff (Filename.chop_extension (Filename.basename source_dir)) in
let fname = source_dir_name ^ extension in
Filename.concat source_dir fname

@ -126,9 +126,6 @@ val source_dir_from_source_file : source_file -> source_dir
(** get the path to the copy of the source file to be stored in the results directory *)
val source_file_in_resdir : source_file -> filename
(** covert a long filename to a short ones by truncating the name and adding a hash *)
val get_short_filename : string -> string
(** directory where the results of the capture phase are stored *)
val captured_dir : unit -> filename

@ -56,6 +56,9 @@ let models_dir =
let lib_specs_dir = Filename.concat lib_dir specs_dir_name in
lib_specs_dir
let string_crc_hex32 s =
Digest.to_hex (Digest.string s)
module JarCache =
struct
let infer_cache : string option ref = ref None
@ -80,7 +83,7 @@ struct
match !infer_cache with
| Some cache_dir ->
let basename = Filename.basename jarfile in
let key = basename ^ CRC.crc16 jarfile in
let key = basename ^ string_crc_hex32 jarfile in
let key_dir = Filename.concat cache_dir key in
if (mkdir key_dir)

@ -449,7 +449,7 @@ let to_simplified_string ?(withclass = false) p =
(** Convert a proc name to a filename *)
let to_filename (pn : proc_name) =
DB.get_short_filename (to_unique_id pn)
string_append_crc_cutoff (to_unique_id pn)
(** Pretty print a proc name *)
let pp f pn =

@ -971,3 +971,17 @@ let analyzer_of_string = function
| "checkers" -> Checkers
| "tracing" -> Tracing
| _ -> raise Unknown_analyzer
let string_crc_hex32 =
Config.string_crc_hex32 (* implemented in Config to avoid circularities *)
let string_append_crc_cutoff ?(cutoff=100) ?(key="") name =
let name_up_to_cutoff =
if String.length name <= cutoff
then name
else String.sub name 0 cutoff in
let crc_str =
let name_for_crc = name ^ key in
string_crc_hex32 name_for_crc in
name_up_to_cutoff ^ "." ^ crc_str

@ -248,6 +248,14 @@ module Arg : sig
end
(** Compute a 32-character hexadecimal crc using the Digest module *)
val string_crc_hex32 : string -> string
(** Append a crc to the string, using string_crc_hex32.
Cut the string if it exceeds the cutoff limit.
Use an optional key to compute the crc. *)
val string_append_crc_cutoff : ?cutoff:int -> ?key:string -> string -> string
(** Check if the lhs is a substring of the rhs. *)
val string_is_prefix : string -> string -> bool

@ -561,7 +561,7 @@ struct
if String.length mangled == 0 then
Procname.from_string_c_fun name
else
let crc = CRC.crc16 mangled in
let crc = string_crc_hex32 mangled in
Procname.mangled_c_fun name crc
let mk_procname_from_objc_method class_name method_name method_kind =
@ -570,7 +570,7 @@ struct
let mk_procname_from_cpp_method class_name method_name tp =
let type_name = Ast_utils.string_of_type_ptr tp in
let type_name_crc = Some (CRC.crc16 type_name) in
let type_name_crc = Some (string_crc_hex32 type_name) in
Procname.mangled_c_method class_name method_name type_name_crc
let get_var_name_string name_info var_decl_info =
@ -598,7 +598,7 @@ struct
let start_location = fst decl_info.Clang_ast_t.di_source_range in
let line_opt = start_location.Clang_ast_t.sl_line in
let line_str = match line_opt with | Some line -> string_of_int line | None -> "" in
let mangled = CRC.crc16 (type_name ^ line_str) in
let mangled = string_crc_hex32 (type_name ^ line_str) in
let mangled_name = Mangled.mangled name_string mangled in
Sil.mk_pvar mangled_name procname
| None -> Sil.mk_pvar (Mangled.from_string name_string) procname

Loading…
Cancel
Save