summaryrefslogtreecommitdiff
path: root/packages/chm
diff options
context:
space:
mode:
authorandrew <andrew@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-07-15 03:28:43 +0000
committerandrew <andrew@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-07-15 03:28:43 +0000
commit0155d6d0039513b0b4d0dbcc86bfa3a8891a2372 (patch)
treea02246b0ed9c1b52c0aeedad7b679b58f2b57c96 /packages/chm
parent8c7b71be1ecedf1bf03c571dabddcf8e9e09924e (diff)
downloadfpc-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.pas7
-rw-r--r--packages/chm/src/chmwriter.pas11
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;