Add scripts for resolving and verifying Chromium binary paths
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Docs CI / lint-and-preview (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Docs CI / lint-and-preview (push) Has been cancelled
				
			- Implemented `chrome-path.js` to define functions for locating Chromium binaries across different platforms and nested directories. - Added `verify-chromium.js` to check for the presence of the Chromium binary and log the results, including candidate paths checked. - The scripts support Linux, Windows, and macOS environments, enhancing the flexibility of Chromium binary detection.
This commit is contained in:
		| @@ -0,0 +1,63 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
|  | ||||
| namespace StellaOps.Scanner.Analyzers.Lang.Go.Internal; | ||||
|  | ||||
| internal static class GoBinaryScanner | ||||
| { | ||||
|     private static readonly ReadOnlyMemory<byte> BuildInfoMagic = new byte[] | ||||
|     { | ||||
|         0xFF, (byte)' ', (byte)'G', (byte)'o', (byte)' ', (byte)'b', (byte)'u', (byte)'i', (byte)'l', (byte)'d', (byte)'i', (byte)'n', (byte)'f', (byte)':' | ||||
|     }; | ||||
|  | ||||
|     public static IEnumerable<string> EnumerateCandidateFiles(string rootPath) | ||||
|     { | ||||
|         var enumeration = new EnumerationOptions | ||||
|         { | ||||
|             RecurseSubdirectories = true, | ||||
|             IgnoreInaccessible = true, | ||||
|             AttributesToSkip = FileAttributes.Device | FileAttributes.ReparsePoint, | ||||
|             MatchCasing = MatchCasing.CaseSensitive, | ||||
|         }; | ||||
|  | ||||
|         foreach (var path in Directory.EnumerateFiles(rootPath, "*", enumeration)) | ||||
|         { | ||||
|             yield return path; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static bool TryReadBuildInfo(string filePath, out string? goVersion, out string? moduleData) | ||||
|     { | ||||
|         goVersion = null; | ||||
|         moduleData = null; | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             var info = new FileInfo(filePath); | ||||
|             if (!info.Exists || info.Length < 64 || info.Length > 128 * 1024 * 1024) | ||||
|             { | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             var data = File.ReadAllBytes(filePath); | ||||
|             var span = new ReadOnlySpan<byte>(data); | ||||
|             var offset = span.IndexOf(BuildInfoMagic.Span); | ||||
|             if (offset < 0) | ||||
|             { | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             var view = span[offset..]; | ||||
|             return GoBuildInfoDecoder.TryDecode(view, out goVersion, out moduleData); | ||||
|         } | ||||
|         catch (IOException) | ||||
|         { | ||||
|             return false; | ||||
|         } | ||||
|         catch (UnauthorizedAccessException) | ||||
|         { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user