anchor.diff:      //  Pascal string have length excluding length byte)
       if p >= pEnd then
         // ran off end of data
  -      raise EHelpFileException.Create( ErrorCorruptHelpFile );
  +      raise EHelpFileException.Create( 'Error reading help file dictionary' );
   
   
       FillChar(c, sizeof(c), 0);      // fill string with NUL chars
  
positive.code:   begin
      if p >= pEnd then
        // ran off end of data
        raise EHelpFileException.Create( ErrorCorruptHelpFile );
  
      pEntryHeader := p;
      IndexTitleLen := pEntryHeader^.TextLength;
      inc( p, sizeof( TIndexEntryHeader ) );
  
      EntryText := '';
  
      if pEntryHeader^.TOCIndex < _Topics.Count then
      begin
  
negative.code: end;
  
  type
    TIndexEntryHeader = packed record
      TextLength: uint8;
      Flags: uint8;
      NumberOfRoots: uint8;
      TOCIndex: uint16;
    end;
    pTIndexEntryHeader = ^TIndexEntryHeader;
  
  procedure THelpFile.ReadIndex;
  var
    IndexIndex: longint; // I can't resist :-)
    pEntryHeader: pTIndexEntryHeader;
    EntryText: string;
    IndexTitleLen: longint;
    p: pByte;
    pEnd: pByte;
    pIndexData: pointer;
    tmpIndexEntry: TIndexEntry;
  begin
    LogEvent(LogParse, 'Read index');
    _Index := TIndex.Create;
    if _pHeader^.nindex = 0 then
      exit; // explicit check required since ndict is unsigned
  
  