sw, createTextRangeByPixelPosition(): fix crash when the position is an image
commit2302ebefb2e25878e8fe1e64d208f265f87d5b9b
authorMiklos Vajna <vmiklos@collabora.com>
Tue, 22 Nov 2022 07:40:47 +0000 (22 08:40 +0100)
committerMiklos Vajna <vmiklos@collabora.com>
Tue, 22 Nov 2022 09:07:52 +0000 (22 10:07 +0100)
tree3dffdb748e7c81b9d91aef5bc1005efc2192a94c
parent4c8411a55aa10bafdda35b8e60b6a1a5e1600329
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 <vmiklos@collabora.com>
Tested-by: Jenkins
offapi/com/sun/star/text/XTextViewTextRangeSupplier.idl
sw/qa/uibase/uno/uno.cxx
sw/source/uibase/uno/unotxvw.cxx