diff --git a/components/fpspreadsheet/source/common/fpshtmlutils.pas b/components/fpspreadsheet/source/common/fpshtmlutils.pas index a853a1db1..3224cf717 100644 --- a/components/fpspreadsheet/source/common/fpshtmlutils.pas +++ b/components/fpspreadsheet/source/common/fpshtmlutils.pas @@ -938,15 +938,26 @@ procedure HTMLToRichText(AWorkbook: TsWorkbook; AFont: TsFont; var analyzer: TsHTMLAnalyzer; j: Integer; + len: Integer; + nrtp: Integer; begin analyzer := TsHTMLAnalyzer.Create(AWorkbook, AFont, AHTMLText + ''); try analyzer.PreserveSpaces := true; analyzer.Exec; APlainText := analyzer.PlainText; - SetLength(ARichTextParams, Length(analyzer.RichTextParams)); - for j:=0 to High(ARichTextParams) do - ARichTextParams[j] := analyzer.RichTextParams[j]; + nrtp := Length(analyzer.RichTextParams); + if nrtp > 0 then begin + // Avoid rich-text parameters beyond text end. + len := UTF8Length(APlainText); + if analyzer.RichTextParams[nrtp-1].FirstIndex > len then + dec(nrtp); + // Copy rich-text parameters to output + SetLength(ARichTextParams, nrtp); + for j:=0 to nrtp-1 do + ARichTextParams[j] := analyzer.RichTextParams[j]; + end else + SetLength(ARichTextParams, 0); finally analyzer.Free; end;