@@ -226,7 +226,7 @@ def withdrawn?
226
226
end
227
227
228
228
def cvss
229
- return "<FILL IN IF AVAILABLE>" if advisory [ "cvss" ] [ "vectorString" ] . nil?
229
+ return if advisory [ "cvss" ] [ "vectorString" ] . nil?
230
230
231
231
advisory [ "cvss" ] [ "score" ] . to_f
232
232
end
@@ -245,12 +245,32 @@ def rubysec_filename
245
245
File . join ( "gems" , package_name , "#{ primary_id } .yml" )
246
246
end
247
247
248
- def rubysec_file_does_not_exist?
249
- !File . exist? ( rubysec_filename )
248
+ def update_file
249
+ saved_data = YAML . load_file ( rubysec_filename )
250
+
251
+ return if saved_data . key? ( "cvss_v3" ) || cvss . nil?
252
+
253
+ cvss_added = false
254
+ File . open ( "#{ rubysec_filename } .tmp" , "w" ) do |f |
255
+ IO . foreach ( rubysec_filename ) do |line |
256
+ if ( line . include? ( 'unaffected_versions:' ) || line . include? ( 'patched_versions:' ) ) && !cvss_added
257
+ f . write ( "cvss_v3: #{ cvss } \n \n " )
258
+ cvss_added = true
259
+ end
260
+ f . write ( line )
261
+ end
262
+ end
263
+
264
+ File . delete ( rubysec_filename )
265
+ File . rename ( "#{ rubysec_filename } .tmp" , rubysec_filename )
266
+
267
+ puts "Updated: #{ rubysec_filename } "
268
+
269
+ rubysec_filename
250
270
end
251
271
252
272
def write_file
253
- return unless rubysec_file_does_not_exist?
273
+ return update_file if File . exist? ( rubysec_filename )
254
274
255
275
data = {
256
276
"gem" => package_name ,
@@ -264,6 +284,7 @@ def write_file
264
284
"unaffected_versions" => [ "<OPTIONAL: FILL IN SEE BELOW>" ]
265
285
}
266
286
data [ "cve" ] = cve_id [ 4 ..20 ] if cve_id
287
+ data [ "cvss_v3" ] = "<FILL IN IF AVAILABLE>" if cvss . nil?
267
288
268
289
dir_to_write = File . dirname ( rubysec_filename )
269
290
Dir . mkdir dir_to_write unless Dir . exist? ( dir_to_write )
0 commit comments