private static string CheckFile(string url, IPackageFile file) { var binary = new BinaryStoreManager(); var symbol = new SymbolStoreManager(); var name = Path.ChangeExtension(Path.GetFileName(file.Path), "pdb"); var compressedName = name.Substring(0, name.Length - 1) + '_'; string hash; using (var stream = file.GetStream()) hash = binary.ReadPdbHash(stream); byte[] buffer; try { using (var client = new WebClient()) buffer = client.DownloadData(string.Format("{0}/{1}/{2}/{3}", url, name, hash, compressedName)); } catch (WebException exception) { return ((HttpWebResponse)exception.Response).StatusCode.ToString(); } //using (var stream = new MemoryStream(buffer)) // if (symbol.ReadHash(stream) != hash) // return "MISMATCHED"; return "FOUND"; }
private static string CheckFile(string url, IPackageFile file) { var binary = new BinaryStoreManager(); var symbol = new SymbolStoreManager(); var name = Path.ChangeExtension(Path.GetFileName(file.Path), "pdb"); var compressedName = name.Substring(0, name.Length - 1) + '_'; string hash; using (var stream = file.GetStream()) hash = binary.ReadPdbHash(stream); byte[] buffer; try { using (var client = new WebClient()) buffer = client.DownloadData(string.Format("{0}/{1}/{2}/{3}", url, name, hash, compressedName)); } catch (WebException exception) { return(((HttpWebResponse)exception.Response).StatusCode.ToString()); } //using (var stream = new MemoryStream(buffer)) // if (symbol.ReadHash(stream) != hash) // return "MISMATCHED"; return("FOUND"); }
public object GetView(string extension, Stream stream) { var builder = new StringBuilder(); var module = ModuleDefinition.ReadModule(stream); builder.AppendLine("Assembly name:"); builder.AppendLine(module.Assembly.FullName); builder.AppendLine(""); var store = new BinaryStoreManager(); builder.AppendLine("Binary hash:"); builder.AppendLine(store.ReadBinaryHash(stream)); builder.AppendLine(""); builder.AppendLine("Symbol hash:"); builder.AppendLine(store.ReadPdbHash(stream)); return builder; }
public object GetView(string extension, Stream stream) { var builder = new StringBuilder(); var module = ModuleDefinition.ReadModule(stream); builder.AppendLine("Assembly name:"); builder.AppendLine(module.Assembly.FullName); builder.AppendLine(""); var store = new BinaryStoreManager(); builder.AppendLine("Binary hash:"); builder.AppendLine(store.ReadBinaryHash(stream)); builder.AppendLine(""); builder.AppendLine("Symbol hash:"); builder.AppendLine(store.ReadPdbHash(stream)); return(builder); }
public static IEnumerable<PackageIssue> Validate(IPackage package) { var binaryStore = new BinaryStoreManager(); var symbolStore = new SymbolStoreManager(); var files = package.GetFiles().ToArray(); var hasSymbols = files.Where(PackageHelper.IsSymbolFile).Any(); var hasSources = files.Where(PackageHelper.IsSourceFile).Any(); var hasName = package.FileName != null && package.FileName.EndsWith(".nupkg", StringComparison.CurrentCultureIgnoreCase); var hasSymbolsName = hasName && package.FileName.EndsWith(".symbols.nupkg", StringComparison.CurrentCultureIgnoreCase); var isSymbolPackage = hasSymbolsName || hasSymbols || hasSources; if (!hasName) { yield return UnableToVerifyPackageName(package.FileName); } else { if (!hasSymbolsName && (hasSymbols || hasSources)) yield return IncorrectSymbolPackageName(package.FileName); if (hasSymbolsName && !hasSymbols && !hasSources) yield return IncorrectPackageName(package.FileName); } foreach (var binaryFile in files.Where(PackageHelper.IsBinaryFile)) { string binaryHash; using (var stream = binaryFile.GetStream()) binaryHash = binaryStore.ReadPdbHash(stream); if (binaryHash == null) yield return NoSymbolSupportIssue(binaryFile.Path); var symbolPath = Path.ChangeExtension(binaryFile.Path, ".pdb"); var symbolFile = GetSingleFile(files, symbolPath); if (isSymbolPackage && symbolFile == null) yield return MissingSymbolFileIssue(binaryFile.Path, symbolPath); if (!isSymbolPackage && symbolFile != null) yield return UnnecessarySymbolFileIssue(binaryFile.Path, symbolFile.Path); if (symbolFile != null) { string symbolHash; using (var stream = symbolFile.GetStream()) symbolHash = symbolStore.ReadHash(stream); if (binaryHash != symbolHash) yield return HashMismatchIssue(binaryFile.Path, binaryHash, symbolFile.Path, symbolHash); } } foreach (var symbolFile in files.Where(PackageHelper.IsSymbolFile)) { var paths = new[] { ".dll", ".exe", ".winmd" } .Select(extension => Path.ChangeExtension(symbolFile.Path, extension)) .ToArray(); if (paths.All(path => GetSingleFile(files, path) == null)) yield return OrphanSymbolFileIssue(symbolFile.Path, paths); } }
public static IEnumerable <PackageIssue> Validate(IPackage package) { var binaryStore = new BinaryStoreManager(); var symbolStore = new SymbolStoreManager(); var files = package.GetFiles().ToArray(); var hasSymbols = files.Where(PackageHelper.IsSymbolFile).Any(); var hasSources = files.Where(PackageHelper.IsSourceFile).Any(); var hasName = package.FileName != null && package.FileName.EndsWith(".nupkg", StringComparison.CurrentCultureIgnoreCase); var hasSymbolsName = hasName && package.FileName.EndsWith(".symbols.nupkg", StringComparison.CurrentCultureIgnoreCase); var isSymbolPackage = hasSymbolsName || hasSymbols || hasSources; if (!hasName) { yield return(UnableToVerifyPackageName(package.FileName)); } else { if (!hasSymbolsName && (hasSymbols || hasSources)) { yield return(IncorrectSymbolPackageName(package.FileName)); } if (hasSymbolsName && !hasSymbols && !hasSources) { yield return(IncorrectPackageName(package.FileName)); } } foreach (var binaryFile in files.Where(PackageHelper.IsBinaryFile)) { string binaryHash; using (var stream = binaryFile.GetStream()) binaryHash = binaryStore.ReadPdbHash(stream); if (binaryHash == null) { yield return(NoSymbolSupportIssue(binaryFile.Path)); } var symbolPath = Path.ChangeExtension(binaryFile.Path, ".pdb"); var symbolFile = GetSingleFile(files, symbolPath); if (isSymbolPackage && symbolFile == null) { yield return(MissingSymbolFileIssue(binaryFile.Path, symbolPath)); } if (!isSymbolPackage && symbolFile != null) { yield return(UnnecessarySymbolFileIssue(binaryFile.Path, symbolFile.Path)); } if (symbolFile != null) { string symbolHash; using (var stream = symbolFile.GetStream()) symbolHash = symbolStore.ReadHash(stream); if (binaryHash != symbolHash) { yield return(HashMismatchIssue(binaryFile.Path, binaryHash, symbolFile.Path, symbolHash)); } } } foreach (var symbolFile in files.Where(PackageHelper.IsSymbolFile)) { var paths = new[] { ".dll", ".exe", ".winmd" } .Select(extension => Path.ChangeExtension(symbolFile.Path, extension)) .ToArray(); if (paths.All(path => GetSingleFile(files, path) == null)) { yield return(OrphanSymbolFileIssue(symbolFile.Path, paths)); } } }