diff options
| author | andrew <andrew@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-07-15 03:28:43 +0000 |
|---|---|---|
| committer | andrew <andrew@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-07-15 03:28:43 +0000 |
| commit | 0155d6d0039513b0b4d0dbcc86bfa3a8891a2372 (patch) | |
| tree | a02246b0ed9c1b52c0aeedad7b679b58f2b57c96 /packages/chm | |
| parent | 8c7b71be1ecedf1bf03c571dabddcf8e9e09924e (diff) | |
| download | fpc-0155d6d0039513b0b4d0dbcc86bfa3a8891a2372.tar.gz | |
* fixed a possible chm compiler crash when a chm without .ht* files is created but full search is enabled.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15573 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/chm')
| -rw-r--r-- | packages/chm/src/chmfiftimain.pas | 7 | ||||
| -rw-r--r-- | packages/chm/src/chmwriter.pas | 11 |
2 files changed, 17 insertions, 1 deletions
diff --git a/packages/chm/src/chmfiftimain.pas b/packages/chm/src/chmfiftimain.pas index 519f32a5b1..c2e3f9207a 100644 --- a/packages/chm/src/chmfiftimain.pas +++ b/packages/chm/src/chmfiftimain.pas @@ -86,11 +86,13 @@ type FStream: TStream; FWordList: TIndexedWordList; FActiveLeafNode: TFIftiNode; + function GetHasData: Boolean; procedure ProcessWords; procedure WriteHeader(IsPlaceHolder: Boolean); procedure WriteAWord(AWord: TIndexedWord); public procedure WriteToStream; + property HasData: Boolean read GetHasData; constructor Create(AStream: TStream; AWordList: TIndexedWordList); destructor Destroy; override; end; @@ -261,6 +263,11 @@ begin FActiveLeafNode.Flush(False); // causes the unwritten parts of the tree to be written end; +function TChmSearchWriter.GetHasData: Boolean; +begin + Result := FActiveLeafNode <> nil; +end; + procedure TChmSearchWriter.WriteHeader ( IsPlaceHolder: Boolean ) ; var diff --git a/packages/chm/src/chmwriter.pas b/packages/chm/src/chmwriter.pas index 8d7f571f06..66bb96f0fb 100644 --- a/packages/chm/src/chmwriter.pas +++ b/packages/chm/src/chmwriter.pas @@ -137,6 +137,7 @@ Type FDefaultFont: String; FDefaultPage: String; FFullTextSearch: Boolean; + FFullTextSearchAvailable: Boolean; FSearchTitlesOnly: Boolean; FStringsStream: TMemoryStream; // the #STRINGS file FTopicsStream: TMemoryStream; // the #TOPICS file @@ -970,7 +971,7 @@ begin FSection0.WriteDWord(NToLE(DWord($0409))); FSection0.WriteDWord(1); - FSection0.WriteDWord(NToLE(DWord(Ord(FFullTextSearch)))); + FSection0.WriteDWord(NToLE(DWord(Ord(FFullTextSearch and FFullTextSearchAvailable)))); FSection0.WriteDWord(0); FSection0.WriteDWord(0); @@ -1256,6 +1257,14 @@ begin if FTopicsStream.Size = 0 then Exit; SearchWriter := TChmSearchWriter.Create(FFiftiMainStream, FIndexedFiles); + // do not add an empty $FIftiMain + if not SearchWriter.HasData then + begin + FFullTextSearchAvailable := False; + SearchWriter.Free; + Exit; + end; + FFullTextSearchAvailable := True; SearchWriter.WriteToStream; SearchWriter.Free; |
