Example #1
0
 // Token: 0x06000026 RID: 38 RVA: 0x000045D0 File Offset: 0x000027D0
 private void ReadMasterTable(long offset)
 {
     try
     {
         byte b  = this._fileBytes[(int)(checked ((IntPtr)offset))];
         byte b2 = b;
         if (b2 != 5)
         {
             if (b2 == 13)
             {
                 ulong num  = this.ConvertToULong((int)offset + 3, 2) - 1UL;
                 int   num2 = 0;
                 bool  flag = this._masterTableEntries != null;
                 if (flag)
                 {
                     num2 = this._masterTableEntries.Length;
                     Array.Resize <SqlHandler.SqliteMasterEntry>(ref this._masterTableEntries, this._masterTableEntries.Length + (int)num + 1);
                 }
                 else
                 {
                     this._masterTableEntries = new SqlHandler.SqliteMasterEntry[num + 1UL];
                 }
                 for (ulong num3 = 0UL; num3 <= num; num3 += 1UL)
                 {
                     ulong num4  = this.ConvertToULong((int)offset + 8 + (int)num3 * 2, 2);
                     bool  flag2 = offset != 100L;
                     if (flag2)
                     {
                         num4 += (ulong)offset;
                     }
                     int num5 = this.Gvl((int)num4);
                     this.Cvl((int)num4, num5);
                     int num6 = this.Gvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL));
                     this.Cvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL), num6);
                     ulong  num7  = num4 + (ulong)((long)num6 - (long)num4 + 1L);
                     int    num8  = this.Gvl((int)num7);
                     int    num9  = num8;
                     long   num10 = this.Cvl((int)num7, num8);
                     long[] array = new long[5];
                     for (int i = 0; i <= 4; i++)
                     {
                         int startIdx = num9 + 1;
                         num9     = this.Gvl(startIdx);
                         array[i] = this.Cvl(startIdx, num9);
                         array[i] = (long)((array[i] <= 9L) ? ((ulong)this._sqlDataTypeSize[(int)(checked ((IntPtr)array[i]))]) : ((ulong)((!SqlHandler.IsOdd(array[i])) ? ((array[i] - 12L) / 2L) : ((array[i] - 13L) / 2L))));
                     }
                     bool flag3 = this._dbEncoding == 1UL || this._dbEncoding == 2UL;
                     if (flag3)
                     {
                         bool flag4 = this._dbEncoding == 1UL;
                         if (flag4)
                         {
                             this._masterTableEntries[num2 + (int)num3].ItemName = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0]), (int)array[1]);
                         }
                         else
                         {
                             bool flag5 = this._dbEncoding == 2UL;
                             if (flag5)
                             {
                                 this._masterTableEntries[num2 + (int)num3].ItemName = Encoding.Unicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0]), (int)array[1]);
                             }
                             else
                             {
                                 bool flag6 = this._dbEncoding == 3UL;
                                 if (flag6)
                                 {
                                     this._masterTableEntries[num2 + (int)num3].ItemName = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0]), (int)array[1]);
                                 }
                             }
                         }
                     }
                     this._masterTableEntries[num2 + (int)num3].RootNum = (long)this.ConvertToULong((int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2]), (int)array[3]);
                     bool flag7 = this._dbEncoding == 1UL;
                     if (flag7)
                     {
                         this._masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2] + (ulong)array[3]), (int)array[4]);
                     }
                     else
                     {
                         bool flag8 = this._dbEncoding == 2UL;
                         if (flag8)
                         {
                             this._masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Unicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2] + (ulong)array[3]), (int)array[4]);
                         }
                         else
                         {
                             bool flag9 = this._dbEncoding == 3UL;
                             if (flag9)
                             {
                                 this._masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)array[0] + (ulong)array[1] + (ulong)array[2] + (ulong)array[3]), (int)array[4]);
                             }
                         }
                     }
                 }
             }
         }
         else
         {
             ushort num11 = (ushort)(this.ConvertToULong((int)offset + 3, 2) - 1UL);
             for (int j = 0; j <= (int)num11; j++)
             {
                 ushort num12  = (ushort)this.ConvertToULong((int)offset + 12 + j * 2, 2);
                 bool   flag10 = offset == 100L;
                 if (flag10)
                 {
                     this.ReadMasterTable((long)((this.ConvertToULong((int)num12, 4) - 1UL) * this._pageSize));
                 }
                 else
                 {
                     this.ReadMasterTable((long)((this.ConvertToULong((int)(offset + (long)((ulong)num12)), 4) - 1UL) * this._pageSize));
                 }
             }
             this.ReadMasterTable((long)((this.ConvertToULong((int)offset + 8, 4) - 1UL) * this._pageSize));
         }
     }
     catch
     {
     }
 }
Example #2
0
        // Token: 0x06000025 RID: 37 RVA: 0x000040D4 File Offset: 0x000022D4
        private bool ReadTableFromOffset(ulong offset)
        {
            bool result;

            try
            {
                bool flag = this._fileBytes[(int)(checked ((IntPtr)offset))] == 13;
                if (flag)
                {
                    ushort num   = (ushort)(this.ConvertToULong((int)offset + 3, 2) - 1UL);
                    int    num2  = 0;
                    bool   flag2 = this._tableEntries != null;
                    if (flag2)
                    {
                        num2 = this._tableEntries.Length;
                        Array.Resize <SqlHandler.TableEntry>(ref this._tableEntries, this._tableEntries.Length + (int)num + 1);
                    }
                    else
                    {
                        this._tableEntries = new SqlHandler.TableEntry[(int)(num + 1)];
                    }
                    for (ushort num3 = 0; num3 <= num; num3 += 1)
                    {
                        ulong num4  = this.ConvertToULong((int)offset + 8 + (int)(num3 * 2), 2);
                        bool  flag3 = offset != 100UL;
                        if (flag3)
                        {
                            num4 += offset;
                        }
                        int num5 = this.Gvl((int)num4);
                        this.Cvl((int)num4, num5);
                        int num6 = this.Gvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL));
                        this.Cvl((int)(num4 + (ulong)((long)num5 - (long)num4) + 1UL), num6);
                        ulong num7  = num4 + (ulong)((long)num6 - (long)num4 + 1L);
                        int   num8  = this.Gvl((int)num7);
                        int   num9  = num8;
                        long  num10 = this.Cvl((int)num7, num8);
                        SqlHandler.RecordHeaderField[] array = null;
                        long num11 = (long)(num7 - (ulong)((long)num8) + 1UL);
                        int  num12 = 0;
                        while (num11 < num10)
                        {
                            Array.Resize <SqlHandler.RecordHeaderField>(ref array, num12 + 1);
                            int num13 = num9 + 1;
                            num9 = this.Gvl(num13);
                            array[num12].Type = this.Cvl(num13, num9);
                            array[num12].Size = (long)((array[num12].Type <= 9L) ? ((ulong)this._sqlDataTypeSize[(int)(checked ((IntPtr)array[num12].Type))]) : ((ulong)((!SqlHandler.IsOdd(array[num12].Type)) ? ((array[num12].Type - 12L) / 2L) : ((array[num12].Type - 13L) / 2L))));
                            num11             = num11 + (long)(num9 - num13) + 1L;
                            num12++;
                        }
                        bool flag4 = array != null;
                        if (flag4)
                        {
                            this._tableEntries[num2 + (int)num3].Content = new string[array.Length];
                            int num14 = 0;
                            for (int i = 0; i <= array.Length - 1; i++)
                            {
                                bool flag5 = array[i].Type > 9L;
                                if (flag5)
                                {
                                    bool flag6 = !SqlHandler.IsOdd(array[i].Type);
                                    if (flag6)
                                    {
                                        bool flag7 = this._dbEncoding == 1UL;
                                        if (flag7)
                                        {
                                            this._tableEntries[num2 + (int)num3].Content[i] = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size);
                                        }
                                        else
                                        {
                                            bool flag8 = this._dbEncoding == 2UL;
                                            if (flag8)
                                            {
                                                this._tableEntries[num2 + (int)num3].Content[i] = Encoding.Unicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size);
                                            }
                                            else
                                            {
                                                bool flag9 = this._dbEncoding == 3UL;
                                                if (flag9)
                                                {
                                                    this._tableEntries[num2 + (int)num3].Content[i] = Encoding.BigEndianUnicode.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        this._tableEntries[num2 + (int)num3].Content[i] = Encoding.Default.GetString(this._fileBytes, (int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size);
                                    }
                                }
                                else
                                {
                                    this._tableEntries[num2 + (int)num3].Content[i] = Convert.ToString(this.ConvertToULong((int)(num7 + (ulong)num10 + (ulong)((long)num14)), (int)array[i].Size));
                                }
                                num14 += (int)array[i].Size;
                            }
                        }
                    }
                }
                else
                {
                    bool flag10 = this._fileBytes[(int)(checked ((IntPtr)offset))] == 5;
                    if (flag10)
                    {
                        ushort num15 = (ushort)(this.ConvertToULong((int)(offset + 3UL), 2) - 1UL);
                        for (ushort num16 = 0; num16 <= num15; num16 += 1)
                        {
                            ushort num17 = (ushort)this.ConvertToULong((int)offset + 12 + (int)(num16 * 2), 2);
                            this.ReadTableFromOffset((this.ConvertToULong((int)(offset + (ulong)num17), 4) - 1UL) * this._pageSize);
                        }
                        this.ReadTableFromOffset((this.ConvertToULong((int)(offset + 8UL), 4) - 1UL) * this._pageSize);
                    }
                }
                result = true;
            }
            catch
            {
                result = false;
            }
            return(result);
        }
Example #3
0
 private bool ReadTableFromOffset(ulong offset)
 {
     try
     {
         if (_fileBytes[offset] == 13)
         {
             ushort num1 = (ushort)(ConvertToULong((int)offset + 3, 2) - 1UL);
             int    num2 = 0;
             if (_tableEntries != null)
             {
                 num2 = _tableEntries.Length;
                 Array.Resize <SqlHandler.TableEntry>(ref _tableEntries, _tableEntries.Length + num1 + 1);
             }
             else
             {
                 this._tableEntries = new SqlHandler.TableEntry[(int)num1 + 1];
             }
             for (ushort index1 = 0; index1 <= num1; ++index1)
             {
                 ulong num3 = ConvertToULong((int)offset + 8 + index1 * 2, 2);
                 if ((long)offset != 100L)
                 {
                     num3 += offset;
                 }
                 int endIdx1 = Gvl((int)num3);
                 this.Cvl((int)num3, endIdx1);
                 int endIdx2 = Gvl((int)((long)num3 + (endIdx1 - (long)num3) + 1L));
                 this.Cvl((int)((long)num3 + (endIdx1 - (long)num3) + 1L), endIdx2);
                 ulong num4                = num3 + (ulong)(endIdx2 - (long)num3 + 1L);
                 int   endIdx3             = Gvl((int)num4);
                 int   endIdx4             = endIdx3;
                 long  num5                = Cvl((int)num4, endIdx3);
                 RecordHeaderField[] array = null;
                 long num6   = (long)num4 - endIdx3 + 1L;
                 int  index2 = 0;
                 while (num6 < num5)
                 {
                     Array.Resize(ref array, index2 + 1);
                     int startIdx = endIdx4 + 1;
                     endIdx4            = Gvl(startIdx);
                     array[index2].Type = Cvl(startIdx, endIdx4);
                     array[index2].Size = array[index2].Type <= 9L ? _sqlDataTypeSize[array[index2].Type] : (!IsOdd(array[index2].Type) ? (array[index2].Type - 12L) / 2L : (array[index2].Type - 13L) / 2L);
                     num6 = num6 + (endIdx4 - startIdx) + 1L;
                     ++index2;
                 }
                 if (array != null)
                 {
                     _tableEntries[num2 + index1].Content = new string[array.Length];
                     int num7 = 0;
                     for (int index3 = 0; index3 <= array.Length - 1; ++index3)
                     {
                         if (array[index3].Type > 9L)
                         {
                             if (!SqlHandler.IsOdd(array[index3].Type))
                             {
                                 if ((long)_dbEncoding == 1L)
                                 {
                                     _tableEntries[num2 + index1].Content[index3] = Encoding.Default.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size);
                                 }
                                 else if ((long)_dbEncoding == 2L)
                                 {
                                     _tableEntries[num2 + index1].Content[index3] = Encoding.Unicode.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size);
                                 }
                                 else if ((long)_dbEncoding == 3L)
                                 {
                                     _tableEntries[num2 + index1].Content[index3] = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size);
                                 }
                             }
                             else
                             {
                                 _tableEntries[num2 + index1].Content[index3] = Encoding.Default.GetString(_fileBytes, (int)((long)num4 + num5 + num7), (int)array[index3].Size);
                             }
                         }
                         else
                         {
                             _tableEntries[num2 + index1].Content[index3] = Convert.ToString(ConvertToULong((int)((long)num4 + num5 + num7), (int)array[index3].Size));
                         }
                         num7 += (int)array[index3].Size;
                     }
                 }
             }
         }
         else if (_fileBytes[offset] == 5)
         {
             ushort num1 = (ushort)(ConvertToULong((int)((long)offset + 3L), 2) - 1UL);
             for (ushort index = 0; index <= num1; ++index)
             {
                 ushort num2 = (ushort)ConvertToULong((int)offset + 12 + index * 2, 2);
                 ReadTableFromOffset((ConvertToULong((int)((long)offset + num2), 4) - 1UL) * _pageSize);
             }
             ReadTableFromOffset((ConvertToULong((int)((long)offset + 8L), 4) - 1UL) * _pageSize);
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }