crashtesting: use a stack with the expected dtor order for its elements
contains test document which crashes if it doesn't Change-Id: Ieeee6cc7007a90d37225fffd636c9648289f04d7
This commit is contained in:
78
include/o3tl/stack.hxx
Normal file
78
include/o3tl/stack.hxx
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
/* -*- 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/.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INCLUDED_O3TL_STACK_HXX
|
||||||
|
#define INCLUDED_O3TL_STACK_HXX
|
||||||
|
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
namespace o3tl
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Same as std::stack (it just wraps it) except at destruction time the
|
||||||
|
* container elements are destroyed in order starting from the top of the stack
|
||||||
|
* which is the order one would rather assume a stack uses, but doesn't have to
|
||||||
|
*
|
||||||
|
* https://connect.microsoft.com/VisualStudio/feedback/details/765649/std-vector-does-not-destruct-in-reverse-order-of-construction
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
|
template<class T> class stack final
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
typedef std::stack<T> stack_t;
|
||||||
|
|
||||||
|
stack_t mStack;
|
||||||
|
public:
|
||||||
|
|
||||||
|
T& top()
|
||||||
|
{
|
||||||
|
return mStack.top();
|
||||||
|
}
|
||||||
|
|
||||||
|
const T& top() const
|
||||||
|
{
|
||||||
|
return mStack.top();
|
||||||
|
}
|
||||||
|
|
||||||
|
void push(const T& val)
|
||||||
|
{
|
||||||
|
mStack.push(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void push(T&& val)
|
||||||
|
{
|
||||||
|
mStack.push(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pop()
|
||||||
|
{
|
||||||
|
mStack.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool empty() const
|
||||||
|
{
|
||||||
|
return mStack.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
~stack()
|
||||||
|
{
|
||||||
|
while (!mStack.empty())
|
||||||
|
mStack.pop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* INCLUDED_O3TL_STACK_HXX */
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -23,7 +23,7 @@
|
|||||||
#include <sal/config.h>
|
#include <sal/config.h>
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <stack>
|
#include <o3tl/stack.hxx>
|
||||||
|
|
||||||
#include <xmloff/dllapi.h>
|
#include <xmloff/dllapi.h>
|
||||||
#include <sal/types.h>
|
#include <sal/types.h>
|
||||||
@@ -86,8 +86,8 @@ class XMLErrors;
|
|||||||
class StyleMap;
|
class StyleMap;
|
||||||
enum class SvXMLErrorFlags;
|
enum class SvXMLErrorFlags;
|
||||||
|
|
||||||
typedef std::stack<SvXMLImportContextRef> SvXMLImportContexts_Impl;
|
typedef o3tl::stack<SvXMLImportContextRef> SvXMLImportContexts_Impl;
|
||||||
typedef std::stack<css::uno::Reference<css::xml::sax::XFastContextHandler>>
|
typedef o3tl::stack<css::uno::Reference<css::xml::sax::XFastContextHandler>>
|
||||||
FastSvXMLImportContexts_Impl;
|
FastSvXMLImportContexts_Impl;
|
||||||
|
|
||||||
namespace xmloff {
|
namespace xmloff {
|
||||||
|
BIN
sw/qa/core/data/xml/fail/ooo71273-1.sxw
Normal file
BIN
sw/qa/core/data/xml/fail/ooo71273-1.sxw
Normal file
Binary file not shown.
Reference in New Issue
Block a user