Skip to content

Commit

Permalink
[java integration] use argfile when trying to store a lot of data in …
Browse files Browse the repository at this point in the history
…the environment

Reviewed By: jeremydubreil

Differential Revision: D5454536

fbshipit-source-id: 05a4e75
  • Loading branch information
sblackshear authored and facebook-github-bot committed Jul 19, 2017
1 parent 03120a3 commit 58a7cc4
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions infer/src/base/CommandLineOption.ml
Original file line number Diff line number Diff line change
Expand Up @@ -826,14 +826,20 @@ let parse ?config_file ~usage action initial_command =
let curr_usage = parse_args ~usage action ?initial_command cl_args in
add_parsed_args_to_args_to_export () ; curr_usage
in
(* we have to be careful not to add too much data to the environment because the size of the
environment contributes to the length of the command to be run. if the environment + CLI is too
big, running any command will fail with a cryptic "exit code 127" error. here, we hack around the
issue by refusing to add a string to the environment if it's sufficiently big (and praying that
this won't make the command fail). TODO (t20145863): use argfiles here *)
if List.is_empty !extra_env_args || String.length !args_to_export < 100000 then
Unix.putenv ~key:args_env_var ~data:!args_to_export ;
(!curr_command, curr_usage)
let to_export =
(* We have to be careful not to add too much data to the environment because the size of the
environment contributes to the length of the command to be run. If the environment + CLI is
too big, running any command will fail with a cryptic "exit code 127" error. Use an argfile
to prevent this from happening *)
let file = Filename.temp_file "args_" "" in
let quoted_file_args =
List.map (decode_env_to_argv !args_to_export) ~f:(fun arg ->
if String.contains arg '\'' then arg else F.sprintf "'%s'" arg )
in
Out_channel.with_file file ~f:(fun oc -> Out_channel.output_lines oc quoted_file_args) ;
"@" ^ file
in
Unix.putenv ~key:args_env_var ~data:to_export ; (!curr_command, curr_usage)
let wrap_line indent_string wrap_length line0 =
let line = indent_string ^ line0 in
Expand Down

0 comments on commit 58a7cc4

Please sign in to comment.