Skip to content

Commit 517f157

Browse files
justin808claude
andauthored
Fix unsafe system calls to use array form in pack_generator.rb (#1914)
Update system calls in lib/react_on_rails/dev/pack_generator.rb to use the safer array form instead of string form for better security and cross-platform compatibility. Changes: - Convert string-based system calls to array form - Update output redirection to use File::NULL with out:/err: options - Update corresponding RSpec tests to match new system call signatures This prevents potential shell injection issues and improves cross-platform compatibility. Fixes #1910 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <[email protected]>
1 parent 5186da7 commit 517f157

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

lib/react_on_rails/dev/pack_generator.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,12 @@ def handle_rake_error(error, _silent)
110110

111111
def run_via_bundle_exec(silent: false)
112112
if silent
113-
system "bundle exec rake react_on_rails:generate_packs > /dev/null 2>&1"
113+
system(
114+
"bundle", "exec", "rake", "react_on_rails:generate_packs",
115+
out: File::NULL, err: File::NULL
116+
)
114117
else
115-
system "bundle exec rake react_on_rails:generate_packs"
118+
system("bundle", "exec", "rake", "react_on_rails:generate_packs")
116119
end
117120
end
118121
end

spec/react_on_rails/dev/pack_generator_spec.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,27 @@
66
RSpec.describe ReactOnRails::Dev::PackGenerator do
77
describe ".generate" do
88
it "runs pack generation successfully in verbose mode" do
9-
command = "bundle exec rake react_on_rails:generate_packs"
10-
allow(described_class).to receive(:system).with(command).and_return(true)
9+
allow(described_class).to receive(:system)
10+
.with("bundle", "exec", "rake", "react_on_rails:generate_packs")
11+
.and_return(true)
1112

1213
expect { described_class.generate(verbose: true) }
1314
.to output(/📦 Generating React on Rails packs.../).to_stdout_from_any_process
1415
end
1516

1617
it "runs pack generation successfully in quiet mode" do
17-
command = "bundle exec rake react_on_rails:generate_packs > /dev/null 2>&1"
18-
allow(described_class).to receive(:system).with(command).and_return(true)
18+
allow(described_class).to receive(:system)
19+
.with("bundle", "exec", "rake", "react_on_rails:generate_packs", out: File::NULL, err: File::NULL)
20+
.and_return(true)
1921

2022
expect { described_class.generate(verbose: false) }
2123
.to output(/📦 Generating packs\.\.\. ✅/).to_stdout_from_any_process
2224
end
2325

2426
it "exits with error when pack generation fails" do
25-
command = "bundle exec rake react_on_rails:generate_packs > /dev/null 2>&1"
26-
allow(described_class).to receive(:system).with(command).and_return(false)
27+
allow(described_class).to receive(:system)
28+
.with("bundle", "exec", "rake", "react_on_rails:generate_packs", out: File::NULL, err: File::NULL)
29+
.and_return(false)
2730

2831
expect { described_class.generate(verbose: false) }.to raise_error(SystemExit)
2932
end

0 commit comments

Comments
 (0)