Exemple #1
0
        internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData)
        {
            switch (type)
            {
            case ExtraDataType.UnicodePathExtraField:
                return(new ExtraUnicodePathExtraField
                {
                    Type = type,
                    Length = length,
                    DataBytes = extraData
                });

            case ExtraDataType.Zip64ExtendedInformationExtraField:
                return(new Zip64ExtendedInformationExtraField
                       (
                           type,
                           length,
                           extraData
                       ));

            default:
                return(new ExtraData
                {
                    Type = type,
                    Length = length,
                    DataBytes = extraData
                });
            }
        }
Exemple #2
0
 public Zip64ExtendedInformationExtraField(ExtraDataType type, ushort length, byte[] dataBytes)
 {
     Type      = type;
     Length    = length;
     DataBytes = dataBytes;
     Process();
 }
Exemple #3
0
        protected void LoadExtra(byte[] extra)
        {
            for (int i = 0; i < extra.Length - 4;)
            {
                ExtraDataType type = (ExtraDataType)BinaryPrimitives.ReadUInt16LittleEndian(extra.AsSpan(i));
                if (!Enum.IsDefined(typeof(ExtraDataType), type))
                {
                    type = ExtraDataType.NotImplementedExtraData;
                }

                ushort length = BinaryPrimitives.ReadUInt16LittleEndian(extra.AsSpan(i + 2));

                // 7zip has this same kind of check to ignore extras blocks that don't conform to the standard 2-byte ID, 2-byte length, N-byte value.
                // CPP/7Zip/Zip/ZipIn.cpp: CInArchive::ReadExtra
                if (length > extra.Length)
                {
                    // bad extras block
                    return;
                }

                byte[] data = new byte[length];
                Buffer.BlockCopy(extra, i + 4, data, 0, length);
                Extra.Add(LocalEntryHeaderExtraFactory.Create(type, length, data));

                i += length + 4;
            }
        }
Exemple #4
0
        protected void LoadExtra(byte[] extra)
        {
            if (extra.Length % 2 != 0)
            {
                return;
            }

            for (int i = 0; i < extra.Length;)
            {
                ExtraDataType type = (ExtraDataType)BitConverter.ToUInt16(extra, i);
                if (!Enum.IsDefined(typeof(ExtraDataType), type))
                {
                    return;
                }
                ushort length = BitConverter.ToUInt16(extra, i + 2);
                byte[] data   = new byte[length];
                Buffer.BlockCopy(extra, i + 4, data, 0, length);
                Extra.Add(new ExtraData
                {
                    Type      = type,
                    Length    = length,
                    DataBytes = data
                });
                i += length + 4;
            }
        }
 internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData)
 {
     return(type switch
     {
         ExtraDataType.UnicodePathExtraField => new ExtraUnicodePathExtraField(type, length, extraData),
         ExtraDataType.Zip64ExtendedInformationExtraField => new Zip64ExtendedInformationExtraField(type, length, extraData),
         _ => new ExtraData(type, length, extraData)
     });
Exemple #6
0
 public object GetExtra(ExtraDataType type)
 {
     if (!HasExtra(type))
     {
         return(null);
     }
     return(Extra.Where(e => e.Type == ExtraDataType.Traceback).First().Data);
 }
        internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData)
        {
            switch (type)
            {
            case ExtraDataType.UnicodePathExtraField:
                return(new ExtraUnicodePathExtraField(type, length, extraData));

            case ExtraDataType.Zip64ExtendedInformationExtraField:
                return(new Zip64ExtendedInformationExtraField(type, length, extraData));
            }
            return(new ExtraData(type, length, extraData));
        }
 internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData)
 {
     if (type == ExtraDataType.UnicodePathExtraField)
     {
         ExtraUnicodePathExtraField field = new ExtraUnicodePathExtraField();
         field.Type = type;
         field.Length = length;
         field.DataBytes = extraData;
         return field;
     }
     ExtraData data = new ExtraData();
     data.Type = type;
     data.Length = length;
     data.DataBytes = extraData;
     return data;
 }
        internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData)
        {
            if (type == ExtraDataType.UnicodePathExtraField)
            {
                ExtraUnicodePathExtraField field = new ExtraUnicodePathExtraField();
                field.Type      = type;
                field.Length    = length;
                field.DataBytes = extraData;
                return(field);
            }
            ExtraData data = new ExtraData();

            data.Type      = type;
            data.Length    = length;
            data.DataBytes = extraData;
            return(data);
        }
        protected void LoadExtra(byte[] extra)
        {
            ushort num2;

            for (int i = 0; i < (extra.Length - 4); i += num2 + 4)
            {
                ExtraDataType notImplementedExtraData = (ExtraDataType)BitConverter.ToUInt16(extra, i);
                if (!Enum.IsDefined(typeof(ExtraDataType), notImplementedExtraData))
                {
                    notImplementedExtraData = ExtraDataType.NotImplementedExtraData;
                }
                num2 = BitConverter.ToUInt16(extra, i + 2);
                byte[] dst = new byte[num2];
                Buffer.BlockCopy(extra, i + 4, dst, 0, num2);
                this.Extra.Add(LocalEntryHeaderExtraFactory.Create(notImplementedExtraData, num2, dst));
            }
        }
        protected void LoadExtra(byte[] extra)
        {
            for (int i = 0; i < extra.Length - 4;)
            {
                ExtraDataType type = (ExtraDataType)DataConverter.LittleEndian.GetUInt16(extra, i);
                if (!Enum.IsDefined(typeof(ExtraDataType), type))
                {
                    type = ExtraDataType.NotImplementedExtraData;
                }

                ushort length = DataConverter.LittleEndian.GetUInt16(extra, i + 2);
                byte[] data   = new byte[length];
                Buffer.BlockCopy(extra, i + 4, data, 0, length);
                Extra.Add(LocalEntryHeaderExtraFactory.Create(type, length, data));

                i += length + 4;
            }
        }
 internal static ExtraData Create(ExtraDataType type,ushort length, byte[] extraData)
 {
     switch (type)
     {
         case ExtraDataType.UnicodePathExtraField:
             return new ExtraUnicodePathExtraField()
             {
                 Type = type,
                 Length = length,
                 DataBytes = extraData
             };
         default:
             return new ExtraData
             {
                 Type = type,
                 Length = length,
                 DataBytes = extraData
             };
     }
 }
        internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData)
        {
            switch (type)
            {
            case ExtraDataType.UnicodePathExtraField:
                return(new ExtraUnicodePathExtraField()
                {
                    Type = type,
                    Length = length,
                    DataBytes = extraData
                });

            default:
                return(new ExtraData
                {
                    Type = type,
                    Length = length,
                    DataBytes = extraData
                });
            }
        }
Exemple #14
0
 public bool HasExtra(ExtraDataType type)
 {
     return(Extra.Any(e => e.Type == type));
 }
 public Zip64ExtendedInformationExtraField(ExtraDataType type, ushort length, byte[] dataBytes)
     : base(type, length, dataBytes)
 {
 }
 public ExtraUnicodePathExtraField(ExtraDataType type, ushort length, byte[] dataBytes)
     : base(type, length, dataBytes)
 {
 }
 public ExtraData(ExtraDataType type, ushort length, byte[] dataBytes)
 {
     Type      = type;
     Length    = length;
     DataBytes = dataBytes;
 }
Exemple #18
0
 public ExtraData(ExtraDataType type, object data)
 {
     Type = type;
     Data = data;
 }