office-gobmx/include/svx/sdtacitm.hxx
Caolán McNamara 086e431480 ofz#20455 sw: HTML import: fix invalid table in footer
The obvious problem was that a bookmark failed to be copied to the
correct node, it was created on a SwStartNode, which failed in
makeMark() and caused a null-pointer.

The target position was off by 1 node because there was a spurious
StartNode/EndNode pair directly below the table:

[  41]   0x5b13430          TableNode ,
[  42]    0x5b1d010         StartNode ,
[  43]     0x5b12a50        StartNode ,
[  44]      0x5b135f0        TextNode "",

This was created by a special case in SwTableNode::MakeCopy() because
.GetTabSortBoxes().size() == 1.

But the table had actually quite a bunch more cells in the nodes-array,
just they were not yet in the SwTable.

In an exciting twist of events, it turns out the table was copied while
it was not yet finished parsing: the problem was that in the middle of
the table, some CSS set some page attributes, and this caused a
first-page page style to be created in SwCSS1Parser::ParseStyleSheet(),
by copying the master page style.

Unfortunately the table was in the <div title="footer">, so it was
copied in this incomplete and inconsistent state.

It might be possible to get rid of the special case in
SwTableNode::MakeCopy() by restricting the special case skipping of
StartNodes at the start in SwNodes::CopyNodes() a bit so that StartNodes
whose EndNodes are copied aren't skipped; at least that's the most
reasonable explanation for the special case.

But for now just fix the HTML import.

Additionally, only on MacOSX, using libc++, this triggered an assert:
  Assertion failed: (!pImpl->mpStaticDefaults || typeid(rItem) == typeid(GetDefaultItem(nWhich))), function PutImpl, file /Users/tdf/lode/jenkins/workspace/lo_gerrit/Config/macosx_clang_dbgutil/svl/source/items/itempool.cxx, line 611.

Probably because SdrTextAniCountItem is not marked DLLPUBLIC.

Change-Id: Ia167265e7540eea649801eaac2b89f9e18b685cd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87859
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
2020-02-12 13:07:39 +01:00

36 lines
1.4 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SVX_SDTACITM_HXX
#define INCLUDED_SVX_SDTACITM_HXX
#include <svl/intitem.hxx>
#include <svx/svddef.hxx>
// Number of loops. 0=infinite.
class SAL_DLLPUBLIC_RTTI SdrTextAniCountItem final : public SfxUInt16Item {
public:
SdrTextAniCountItem(sal_uInt16 nVal=0): SfxUInt16Item(SDRATTR_TEXT_ANICOUNT,nVal) {}
virtual SdrTextAniCountItem* Clone(SfxItemPool * = nullptr) const override
{ return new SdrTextAniCountItem(*this); }
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */