From 2302ebefb2e25878e8fe1e64d208f265f87d5b9b Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 22 Nov 2022 08:40:47 +0100 Subject: sw, createTextRangeByPixelPosition(): fix crash when the position is an image Using createTextRangeByPixelPosition() with a pixel position that leads to a graphic node resulted in a crash. The direct reason for this is that the makeMark() call in SwXTextRange::SetPositions() returns nullptr in case rPaM points to a graphic node, but later we dereference that result unconditionally. This also uncovers that the XTextRange returned by createTextRangeByPixelPosition() is meant to point to a text node, but a pixel position may be closest to a graphic node. Fix the problem by explicitly checking for graphic nodes; and try to look up the anchor position of such graphics, which will be definitely a text node. In practice this will mean that in case the image's anchor type is as-char, then we'll return a cursor position which will be on the left hand side of the image. Change-Id: Ief58148247fe3cd4371ed245b4eff5b45ca2aa15 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143092 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- offapi/com/sun/star/text/XTextViewTextRangeSupplier.idl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'offapi') diff --git a/offapi/com/sun/star/text/XTextViewTextRangeSupplier.idl b/offapi/com/sun/star/text/XTextViewTextRangeSupplier.idl index 56ea30efc070..faa85578c458 100644 --- a/offapi/com/sun/star/text/XTextViewTextRangeSupplier.idl +++ b/offapi/com/sun/star/text/XTextViewTextRangeSupplier.idl @@ -25,7 +25,12 @@ module com { module sun { module star { module text { */ interface XTextViewTextRangeSupplier: com::sun::star::uno::XInterface { - /** @returns + /** creates the text range of the document model position at a view-dependent pixel position. + + Note that in case the model position is a graphic, then the model position of its anchor is + returned. + + @returns the text range of the document position. */ com::sun::star::text::XTextRange createTextRangeByPixelPosition([in] com::sun::star::awt::Point PixelPosition); -- cgit v1.2.3