Changeset 113 for trunk/lib/regfi.c


Ignore:
Timestamp:
05/04/08 14:29:02 (16 years ago)
Author:
tim
Message:

fixed some VK record parsing bugs

added more strict checking on unallocated ranges

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/regfi.c

    r111 r113  
    16651665  if(ret_val->flag & VK_FLAG_NAME_PRESENT)
    16661666  {
    1667     if(ret_val->name_length + REGFI_VK_MIN_LENGTH > ret_val->cell_size)
     1667    if(ret_val->name_length + REGFI_VK_MIN_LENGTH + 4 > ret_val->cell_size)
    16681668    {
    16691669      if(strict)
     
    16731673      }
    16741674      else
    1675         ret_val->name_length = ret_val->cell_size - REGFI_VK_MIN_LENGTH;
     1675        ret_val->name_length = ret_val->cell_size - REGFI_VK_MIN_LENGTH - 4;
    16761676    }
    16771677
    16781678    /* Round up to the next multiple of 8 */
    1679     length = (ret_val->name_length + REGFI_NK_MIN_LENGTH) & 0xFFFFFFF8;
    1680     if(length < ret_val->name_length + REGFI_NK_MIN_LENGTH)
    1681       length+=8;
     1679    cell_length = (ret_val->name_length + REGFI_VK_MIN_LENGTH + 4) & 0xFFFFFFF8;
     1680    if(cell_length < ret_val->name_length + REGFI_VK_MIN_LENGTH + 4)
     1681      cell_length+=8;
    16821682
    16831683    ret_val->valuename = (char*)zalloc(sizeof(char)*(ret_val->name_length+1));
     
    16871687      return NULL;
    16881688    }
    1689    
    1690     /* Don't need to seek, should be at the right offset */
     1689
    16911690    length = ret_val->name_length;
    16921691    if((regfi_read(file->fd, (uint8*)ret_val->valuename, &length) != 0)
     
    17001699  }
    17011700  else
    1702     length = REGFI_VK_MIN_LENGTH;
     1701    cell_length = REGFI_VK_MIN_LENGTH + 4;
    17031702
    17041703  if(unalloc)
    17051704  {
    17061705    /* If cell_size is still greater, truncate. */
    1707     if(length < ret_val->cell_size)
    1708       ret_val->cell_size = length;
     1706    if(cell_length < ret_val->cell_size)
     1707      ret_val->cell_size = cell_length;
    17091708  }
    17101709
     
    18161815        break;
    18171816     
    1818       if((cell_len == 0) || ((cell_len & 0xFFFFFFFC) != cell_len))
     1817      if((cell_len == 0) || ((cell_len & 0xFFFFFFF8) != cell_len))
    18191818        /* TODO: should report an error here. */
    18201819        break;
Note: See TracChangeset for help on using the changeset viewer.