Skip to content

Commit 01303b8

Browse files
committed
Bash expressions do not fail 'single entry' check
Previously, if the value of a JAVA_OPTS was a bash expression (like in the AppDynamics Framework), it would run afoul of the enforcement that values in JAVA_OPTS must be a 'single entry'. It would, however, only cause a problem if a custom JAVA_OPT was specified as well (via the java_opts.yml file). This change updates the detection logic for the 'single entry' so that it makes an exception for bash expressions and ensures that the check is only run when Play applications are being pushed. [#67900270]
1 parent 7a87cc3 commit 01303b8

16 files changed

Lines changed: 48 additions & 62 deletions

File tree

.idea/copyright/profiles_settings.xml

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/runConfigurations/All_Tests.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/runConfigurations/Without_Integration_Tests.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ GEM
1111
diff-lcs (1.2.5)
1212
docile (1.1.3)
1313
json (1.8.1)
14-
multi_json (1.9.0)
14+
multi_json (1.9.2)
1515
parser (2.1.7)
1616
ast (~> 1.1)
1717
slop (~> 3.4, >= 3.4.5)
@@ -31,7 +31,7 @@ GEM
3131
rspec-mocks (3.0.0.beta2)
3232
rspec-support (= 3.0.0.beta2)
3333
rspec-support (3.0.0.beta2)
34-
rubocop (0.19.0)
34+
rubocop (0.19.1)
3535
json (>= 1.7.7, < 2)
3636
parser (~> 2.1.7)
3737
powerpack (~> 0.0.6)

java-buildpack.iml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@
277277
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.2.5, rbenv: 1.9.3-p545) [gem]" level="application" />
278278
<orderEntry type="library" scope="PROVIDED" name="docile (v1.1.3, rbenv: 1.9.3-p545) [gem]" level="application" />
279279
<orderEntry type="library" scope="PROVIDED" name="json (v1.8.1, rbenv: 1.9.3-p545) [gem]" level="application" />
280-
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.9.0, rbenv: 1.9.3-p545) [gem]" level="application" />
280+
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.9.2, rbenv: 1.9.3-p545) [gem]" level="application" />
281281
<orderEntry type="library" scope="PROVIDED" name="parser (v2.1.7, rbenv: 1.9.3-p545) [gem]" level="application" />
282282
<orderEntry type="library" scope="PROVIDED" name="powerpack (v0.0.9, rbenv: 1.9.3-p545) [gem]" level="application" />
283283
<orderEntry type="library" scope="PROVIDED" name="rainbow (v2.0.0, rbenv: 1.9.3-p545) [gem]" level="application" />

lib/java_buildpack/framework/java_opts.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,13 @@ def compile
3939

4040
# @macro base_component_release
4141
def release
42-
java_opts = @droplet.java_opts
43-
44-
check_single_options java_opts
45-
java_opts.concat parsed_java_opts
42+
@droplet.java_opts.concat parsed_java_opts
4643
end
4744

4845
private
4946

5047
CONFIGURATION_PROPERTY = 'java_opts'.freeze
5148

52-
def check_single_options(opts)
53-
opts.each do |option|
54-
fail "Invalid Java option contains more than one option: '#{option}'" if option.shellsplit.length > 1
55-
end
56-
end
57-
5849
def memory_option?(option)
5950
option =~ /-Xms/ || option =~ /-Xmx/ || option =~ /-XX:MaxMetaspaceSize/ || option =~ /-XX:MaxPermSize/ ||
6051
option =~ /-Xss/ || option =~ /-XX:MetaspaceSize/ || option =~ /-XX:PermSize/

lib/java_buildpack/util/play/post22.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
require 'java_buildpack/util/play'
1818
require 'java_buildpack/util/play/base'
1919
require 'java_buildpack/util/start_script'
20+
require 'shellwords'
2021

2122
module JavaBuildpack
2223
module Util
@@ -39,7 +40,15 @@ def augment_classpath
3940

4041
# @macro base_java_opts
4142
def java_opts
42-
@droplet.java_opts.map { |java_opt| "-J#{java_opt}" }
43+
java_opts = @droplet.java_opts
44+
45+
java_opts.each do |option|
46+
if option.shellsplit.length > 1 && !bash_expression?(option)
47+
fail "Invalid Java option contains more than one option: '#{option}'"
48+
end
49+
end
50+
51+
java_opts.map { |java_opt| "-J#{java_opt}" }
4352
end
4453

4554
# @macro base_lib_dir
@@ -62,6 +71,12 @@ def root
6271
fail "Method 'root' must be defined"
6372
end
6473

74+
private
75+
76+
def bash_expression?(option)
77+
option =~ /\$\(expr/
78+
end
79+
6580
end
6681

6782
end

lib/java_buildpack/util/play/pre22.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ class Pre22 < Base
2525

2626
protected
2727

28+
# @macro base_java_opts
29+
def java_opts
30+
@droplet.java_opts
31+
end
32+
2833
# @macro base_start_script
2934
def start_script
3035
root ? root + 'start' : nil
3136
end
3237

33-
protected
34-
3538
# @!macro [new] pre22_root
3639
# Returns the root of the play application
3740
#

lib/java_buildpack/util/play/pre22_dist.rb

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@ def augment_classpath
3838
end
3939
end
4040

41-
# @macro base_java_opts
42-
def java_opts
43-
@droplet.java_opts
44-
end
45-
4641
# @macro base_lib_dir
4742
def lib_dir
4843
root + 'lib'

lib/java_buildpack/util/play/pre22_staged.rb

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ def augment_classpath
3030
@droplet.additional_libraries.link_to lib_dir
3131
end
3232

33-
# @macro base_java_opts
34-
def java_opts
35-
@droplet.java_opts
36-
end
37-
3833
# @macro base_lib_dir
3934
def lib_dir
4035
root + 'staged'

0 commit comments

Comments
 (0)