@@ -75,15 +75,17 @@ def extractEvidence(desiredLine: int, file: str) -> list[Line]:
7575	""" 
7676	with  open (file , encoding = "utf-8" , errors = "ignore" ) as  fileContents :
7777		start  =  max (desiredLine  -  3 , 0 )
78- 		for  line  in  range (start ):
79- 			next (fileContents )
8078		content  =  []
81- 		for  line  in  range (start  +  1 , desiredLine  +  3 ):
82- 			try :
79+ 		try :
80+ 			for  line  in  range (start ):
81+ 				next (fileContents )
82+ 			for  line  in  range (start  +  1 , desiredLine  +  3 ):
8383				lineContent  =  next (fileContents ).rstrip ().replace ("\t " , "    " )
84- 			except  StopIteration :
85- 				break 
86- 			content .append ({"selected" : line  ==  desiredLine , "line" : line , "content" : lineContent })
84+ 				content .append (
85+ 					{"selected" : line  ==  desiredLine , "line" : line , "content" : lineContent }
86+ 				)
87+ 		except  StopIteration :
88+ 			pass 
8789	return  content 
8890
8991
@@ -115,20 +117,22 @@ def bandit(scanDir=".") -> list[Finding]:
115117		)[1 ]
116118	)["results" ]
117119	for  result  in  results :
118- 		file  =  result ["filename" ].replace ("\\ " , "/" )
120+ 		file  =  result .get ("filename" ).replace ("\\ " , "/" )
121+ 		resultId  =  result .get ("test_id" )
122+ 		line  =  result .get ("line_number" )
119123		findings .append (
120124			{
121- 				"id" : result [ "test_id" ] ,
122- 				"title" : f"{ result [ 'test_id' ] }  : { result [ 'test_name' ] }  " ,
123- 				"description" : result [ "issue_text" ] ,
125+ 				"id" : resultId ,
126+ 				"title" : f"{ resultId }  : { result . get ( 'test_name' ) }  " ,
127+ 				"description" : result . get ( "issue_text" ) ,
124128				"file" : file ,
125- 				"evidence" : extractEvidence (result [ "line_number" ] , file ),
126- 				"severity" : levelMap [result [ "issue_severity" ] ],
127- 				"confidence" : levelMap [result [ "issue_confidence" ] ],
128- 				"line" : result [ "line_number" ] ,
129+ 				"evidence" : extractEvidence (line , file ),
130+ 				"severity" : levelMap [result . get ( "issue_severity" ) ],
131+ 				"confidence" : levelMap [result . get ( "issue_confidence" ) ],
132+ 				"line" : line ,
129133				"_other" : {
130- 					"more_info" : result [ "more_info" ] ,
131- 					"line_range" : result [ "line_range" ] ,
134+ 					"more_info" : result . get ( "more_info" ) ,
135+ 					"line_range" : result . get ( "line_range" ) ,
132136				},
133137			}
134138		)
@@ -138,23 +142,45 @@ def bandit(scanDir=".") -> list[Finding]:
138142def  _doSafetyProcessing (results : dict [str , Any ]) ->  list [Finding ]:
139143	findings  =  []
140144	for  result  in  results ["vulnerabilities" ]:
145+ 		vulnerabilityId  =  result .get ("vulnerability_id" )
146+ 		packageName  =  result .get ("package_name" )
147+ 		advisory  =  result .get ("advisory" )
148+ 
149+ 		moreInfo  =  result .get ("more_info_url" )
150+ 		affectedVersions  =  "; " .join (result .get ("affected_versions" ))
151+ 
152+ 		content  =  f"{ packageName }  , version(s)={ affectedVersions }  " 
153+ 		description  =  (
154+ 			f"Vulnerability found in package { packageName }  ," 
155+ 			f"version(s)={ affectedVersions }  . { advisory }  . More info available at { moreInfo }  " 
156+ 		)
157+ 
158+ 		cvssv3Score  =  result .get ("severity" ).get ("cvssv3" , {}).get ("base_score" , 0 )
159+ 		severity  =  Level .LOW 
160+ 		if  cvssv3Score  >  3.9 :
161+ 			severity  =  Level .MED 
162+ 		if  cvssv3Score  >  6.9 :
163+ 			severity  =  Level .HIGH 
164+ 		if  cvssv3Score  >  8.9 :
165+ 			severity  =  Level .CRIT 
166+ 
141167		findings .append (
142168			{
143- 				"id" : result [ 4 ] ,
144- 				"title" : f"{ result [ 4 ] }  : { result [ 0 ] }  " ,
145- 				"description" : result [ 3 ] ,
169+ 				"id" : vulnerabilityId ,
170+ 				"title" : f"{ vulnerabilityId }  : { packageName }  " ,
171+ 				"description" : description ,
146172				"file" : "Project Requirements" ,
147173				"evidence" : [
148174					{
149175						"selected" : True ,
150176						"line" : 0 ,
151- 						"content" : f" { result [ 0 ] }  version= { result [ 2 ] }  affects { result [ 1 ] } "  ,
177+ 						"content" : content ,
152178					}
153179				],
154- 				"severity" : Level . MED ,
180+ 				"severity" : severity ,
155181				"confidence" : Level .HIGH ,
156182				"line" : "Unknown" ,
157- 				"_other" : {"id" : result [ 4 ] , "affected " : result [ 1 ] },
183+ 				"_other" : {"id" : vulnerabilityId , "affectedVersions " : affectedVersions },
158184			}
159185		)
160186	return  findings 
@@ -227,17 +253,18 @@ def dodgy(scanDir=".") -> list[Finding]:
227253	rawResults  =  _doSysExec (f"dodgy { scanDir }   -i { ' ' .join (EXCLUDED )}  " )[1 ]
228254	results  =  loads (rawResults )["warnings" ]
229255	for  result  in  results :
230- 		file  =  "./"  +  result ["path" ].replace ("\\ " , "/" )
256+ 		file  =  "./"  +  result .get ("path" ).replace ("\\ " , "/" )
257+ 		message  =  result .get ("message" )
231258		findings .append (
232259			{
233- 				"id" : result [ "code" ] ,
234- 				"title" : result [ " message" ] ,
235- 				"description" : result [ " message" ] ,
260+ 				"id" : result . get ( "code" ) ,
261+ 				"title" : message ,
262+ 				"description" : message ,
236263				"file" : file ,
237- 				"evidence" : extractEvidence (result [ "line" ] , file ),
264+ 				"evidence" : extractEvidence (result . get ( "line" ) , file ),
238265				"severity" : Level .MED ,
239266				"confidence" : Level .MED ,
240- 				"line" : result [ "line" ] ,
267+ 				"line" : result . get ( "line" ) ,
241268				"_other" : {},
242269			}
243270		)
@@ -269,29 +296,31 @@ def dlint(scanDir=".") -> list[Finding]:
269296		"info" : Level .LOW ,
270297		"minor" : Level .MED ,
271298		"major" : Level .MED ,
272- 		"critical" : Level .HIGH ,
273- 		"blocker" : Level .HIGH ,
299+ 		"critical" : Level .CRIT ,
300+ 		"blocker" : Level .CRIT ,
274301	}
275302	for  filePath , scanResults  in  jsonResults .items ():
276- 		for  scanResult  in  scanResults :
303+ 		for  result  in  scanResults :
304+ 			message  =  f"{ result .get ('check_name' )}  : "  f"{ result .get ('description' )}  " 
305+ 			positions  =  result .get ("location" , {}).get ("positions" , {})
306+ 			line  =  positions .get ("begin" , {}).get ("line" , 0 )
277307			findings .append (
278308				{
279- 					"id" : scanResult [ "check_name" ] ,
280- 					"title" : f" { scanResult [ 'check_name' ] } : "   f" { scanResult [ 'description' ] } "  ,
281- 					"description" : f" { scanResult [ 'check_name' ] } : "   f" { scanResult [ 'description' ] } "  ,
309+ 					"id" : result . get ( "check_name" ) ,
310+ 					"title" : message ,
311+ 					"description" : message ,
282312					"file" : filePath ,
283313					"evidence" : extractEvidence (
284- 						scanResult [ "location" ][ "positions" ][ "begin" ][ " line" ] ,
314+ 						line ,
285315						filePath ,
286316					),
287- 					"severity" : levelMap [scanResult [ "severity" ] ],
317+ 					"severity" : levelMap [result . get ( "severity" ) ],
288318					"confidence" : Level .MED ,
289- 					"line" : scanResult [ "location" ][ "positions" ][ "begin" ][ " line" ] ,
319+ 					"line" : line ,
290320					"_other" : {
291- 						"col" : scanResult ["location" ]["positions" ]["begin" ]["column" ],
292- 						"start" : scanResult ["location" ]["positions" ]["begin" ]["line" ],
293- 						"end" : scanResult ["location" ]["positions" ]["end" ]["line" ],
294- 						"fingerprint" : scanResult ["fingerprint" ],
321+ 						"start" : line ,
322+ 						"end" : positions .get ("end" , {}).get ("line" , 0 ),
323+ 						"fingerprint" : result .get ("fingerprint" ),
295324					},
296325				}
297326			)
@@ -324,23 +353,24 @@ def semgrep(scanDir=".") -> list[Finding]:
324353	)["results" ]
325354	levelMap  =  {"INFO" : Level .LOW , "WARNING" : Level .MED , "ERROR" : Level .HIGH }
326355	for  result  in  results :
327- 		filePath  =  result [ "Target" ] .replace ("\\ " , "/" )
356+ 		filePath  =  result . get ( "Target" ) .replace ("\\ " , "/" )
328357		file  =  f"{ scanDir }  /{ filePath }  " 
358+ 		resultId  =  result .get ("check_id" , "" )
359+ 		extras  =  result .get ("extra" , {})
360+ 		line  =  result .get ("start" , {}).get ("line" , 0 )
329361		findings .append (
330362			{
331- 				"id" : result [ "check_id" ] ,
332- 				"title" : result [ "check_id" ] .split ("." )[- 1 ],
333- 				"description" : result [ "extra" ][ " message"] .strip (),
363+ 				"id" : resultId ,
364+ 				"title" : resultId .split ("." )[- 1 ],
365+ 				"description" : extras ( " message") .strip (),
334366				"file" : file ,
335- 				"evidence" : extractEvidence (result [ "start" ][ " line" ] , file ),
336- 				"severity" : levelMap [result [ "extra" ][ " severity"] ],
367+ 				"evidence" : extractEvidence (line , file ),
368+ 				"severity" : levelMap [extras ( " severity") ],
337369				"confidence" : Level .HIGH ,
338- 				"line" : result [ "start" ][ " line" ] ,
370+ 				"line" : line ,
339371				"_other" : {
340- 					"col" : result ["start" ]["col" ],
341- 					"start" : result ["start" ],
342- 					"end" : result ["end" ],
343- 					"extra" : result ["extra" ],
372+ 					"end" : result .get ("end" ),
373+ 					"extra" : extras ,
344374				},
345375			}
346376		)
0 commit comments