File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 228228
229229unless ENV [ "BLOCKED_VERSIONS" ] . to_s . strip . empty?
230230 # For example:
231- # [{"dependency-name":"event-stream","version":"= 3.3.6","reason":"malware"}]
231+ # [{"dependency-name":"event-stream","version-requirement ":"= 3.3.6","reason":"malware"}]
232232 $options[ :blocked_versions ] = JSON . parse ( ENV . fetch ( "BLOCKED_VERSIONS" , nil ) )
233233end
234234
@@ -730,9 +730,9 @@ def ignored_versions_for(dep)
730730
731731 def blocked_versions_for ( dep )
732732 $options[ :blocked_versions ]
733- . select { |bv | bv [ "dependency-name" ] && bv [ "version" ] }
733+ . select { |bv | bv [ "dependency-name" ] && bv [ "version-requirement " ] }
734734 . select { |bv | bv [ "dependency-name" ] . casecmp ( dep . name ) . zero? }
735- . map { |bv | bv [ "version" ] }
735+ . map { |bv | bv [ "version-requirement " ] }
736736 end
737737
738738 def security_advisories
@@ -794,7 +794,7 @@ def security_fix?(dependency)
794794 if $options[ :blocked_versions ] . any?
795795 puts "=> blocked versions active:"
796796 $options[ :blocked_versions ] . each do |bv |
797- msg = " #{ bv [ 'dependency-name' ] } #{ bv [ 'version' ] } "
797+ msg = " #{ bv [ 'dependency-name' ] } #{ bv [ 'version-requirement ' ] } "
798798 msg += " (#{ bv [ 'reason' ] } )" if bv [ "reason" ]
799799 puts msg
800800 end
Original file line number Diff line number Diff line change @@ -408,7 +408,7 @@ def fetch_blocked_versions(package_manager)
408408 return [ ]
409409 end
410410 data = parsed . fetch ( "data" , [ ] )
411- unless data . is_a? ( Array )
411+ unless data . is_a? ( Array ) && data . all? ( Hash )
412412 Dependabot . logger . warn ( "Unexpected blocked versions format, continuing without them" )
413413 return [ ]
414414 end
Original file line number Diff line number Diff line change @@ -73,15 +73,14 @@ def job
7373 definition = JSON . parse ( JSON . generate ( Environment . job_definition ) )
7474 job_hash = definition [ "job" ]
7575
76- # Register experiments from the job definition early so experiment
77- # gates below can read flags that arrive via the job payload.
78- ( job_hash [ "experiments" ] || { } ) . each do |name , value |
79- Experiments . register ( name . to_s . tr ( "-" , "_" ) , value )
80- end
81-
8276 # Fetch blocked versions from the API if the experiment is enabled.
77+ # Check both the Experiments registry and the raw job definition since
78+ # job-scoped experiments are not registered until Job construction.
8379 # Inject them into the job definition so they're available at construction time.
84- if Experiments . enabled? ( :dependabot_blocked_versions )
80+ experiments = job_hash [ "experiments" ] || { }
81+ if Experiments . enabled? ( :dependabot_blocked_versions ) ||
82+ experiments [ "dependabot_blocked_versions" ] ||
83+ experiments [ "dependabot-blocked-versions" ]
8584 package_manager = job_hash [ "package-manager" ] || job_hash [ "package_manager" ] || ""
8685 blocked = service . fetch_blocked_versions ( package_manager )
8786 job_hash [ "blocked-versions" ] = blocked
Original file line number Diff line number Diff line change 921921 expect ( result ) . to eq ( [ ] )
922922 end
923923 end
924+
925+ context "when the API returns data entries that are not hashes" do
926+ before do
927+ stub_request ( :get , blocked_versions_url )
928+ . with ( query : { "package-manager" : "npm_and_yarn" } )
929+ . to_return (
930+ status : 200 ,
931+ body : { data : [ 1 , "not-a-hash" ] } . to_json ,
932+ headers : headers
933+ )
934+ end
935+
936+ it "returns an empty array and logs a warning" do
937+ expect ( Dependabot . logger ) . to receive ( :warn ) . with ( /Unexpected blocked versions format/ )
938+ result = client . fetch_blocked_versions ( "npm_and_yarn" )
939+ expect ( result ) . to eq ( [ ] )
940+ end
941+ end
924942 end
925943end
You can’t perform that action at this time.
0 commit comments