message: AdmZipProvider: Fix extraction of files with improper pathnames
diff: import ZipProvider from './ZipProvider';
  -import AdmZip from 'adm-zip';
  +import AdmZip, { IZipEntry } from 'adm-zip';
  +import * as path from 'path';
  import ZipBuilder from './ZipBuilder';
  import ZipEntryInterface from './ZipEntryInterface';
  +import FileUtils from 'src/utils/FileUtils';
  +import FsProvider from '../file/FsProvider';
  export default class AdmZipProvider extends ZipProvider {
  async extractAllTo(zip: string | Buffer, outputFolder: string): Promise<void> {
  const adm = new AdmZip(zip);
  - adm.extractAllTo(outputFolder, true);
  + for (let entry of adm.getEntries()) {
  + await this.sanitizedExtraction(entry, outputFolder);
  + }
  }
  async readFile(zip: string | Buffer, file: string): Promise<Buffer | null> {
  @@ -22,7 +27,13 @@ export default class AdmZipProvider extends ZipProvider {
  async extractEntryTo(zip: string | Buffer, target: string, outputPath: string): Promise<void> {
  const adm = new AdmZip(zip);
  - adm.extractEntryTo(target, outputPath, true, true);
  + return this.sanitizedExtraction(adm.getEntry(target), outputPath);
  + }
  +
  + private async sanitizedExtraction(entry: IZipEntry, outputPath: string): Promise<void> {
  + const sanitizedTargetName = entry.entryName.split('\\').join('/');
  + await FileUtils.ensureDirectory(path.dirname(path.join(outputPath, sanitizedTargetName)));
  + await FsProvider.instance.writeFile(path.join(outputPath, sanitizedTargetName), entry.getData());
  }
  zipBuilder(): ZipBuilder {
  