Hello All,
The following RTF chunk causes the TParagraph.Trim method to enter an infinite loop.
Code
{\rtf1\ansi\deff0\uc1\ansicpg1250\deftab720{\fonttbl{\f0\fnil\fcharset1 Arial;}{\f1\fnil\fcharset238 Arial;}{\f2\fnil\fcharset2 Wingdings;}{\f3\fnil\fcharset2 Symbol;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red128\green0\blue0;\red0\green255\blue0;\red0\green255\blue255;\red0\green128\blue128;\red0\green0\blue128;\red255\green255\blue255;\red192\green192\blue192;\red128\green128\blue128;\red0\green0\blue0;\red128\green128\blue0;}\wpprheadfoot1\paperw12240\paperh15840\margl1880\margr1880\margt1440\margb1440\headery720\footery720\pgbrdrhead\pgbrdrfoot\pgbrdropt32\endnhere\sectdefaultcl{\*\generator WPTools_6.060;}{\stylesheet{\s1\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs24 Normal;}{\s2\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Default Paragraph Font;}}{\tblstart1{\trowd\trleft0\trgaph108\trpaddfl3\trpaddl108\trpaddfr3\trpaddr108\trbrdrl\brdrs\brdrw10\trbrdrr\brdrs\brdrw10\trbrdrt\brdrs\brdrw10\trbrdrb\brdrs\brdrw10\trbrdrv\brdrs\brdrw10\trbrdrh\brdrs\brdrw10\trftsWidth3\trwWidth14148\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clbrdrt\brdrs\brdrw45\clbrdrl\brdrs\brdrw10\clshdnil\clftsWidth3\clwWidth4580\clvertalt\cellx4580\pard\intbl\itap1\li0\fi0\ri0\sb0\sa0\ql\wpparflg32\clshdnil\plain\f1\fs16 - the SNSA's internal procedures OP 5.3, OP 5.5\cell\row}\tblend1\pard\plain\par}}
The chunk came from a Word document that was pasted into a WPTools RTF RichEdit and then stored in database.
WPTools 6.12.
Regards, Paul
Test Code
Code
program Project1;
{$APPTYPE CONSOLE}
uses
Classes,
WPCTRMemo,
WPRTEDefs,
SysUtils;
var
Editor : TWPCustomRtfEdit;
Stream : TFileStream;
Para : TParagraph;
begin
try
Editor := TWPCustomRtfEdit.CreateDynamic;
try
Stream := TFileStream.Create('c:\temp\test.rtf', fmOpenRead);
try
Para := Editor.ActivePar;
Para.LoadFromStream(Stream);
Para.Trim; // <--- Loop here
Editor.ReformatAll();
Editor.SaveToFile('c:\temp\output.rtf');
finally
Stream.Free;
end;
finally
Editor.Free;
end;
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Alles anzeigen