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:
parent
22cea99518
commit
fd79f88272
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 <set>
|
||||
#include <stack>
|
||||
#include <o3tl/stack.hxx>
|
||||
|
||||
#include <xmloff/dllapi.h>
|
||||
#include <sal/types.h>
|
||||
@ -86,8 +86,8 @@ class XMLErrors;
|
||||
class StyleMap;
|
||||
enum class SvXMLErrorFlags;
|
||||
|
||||
typedef std::stack<SvXMLImportContextRef> SvXMLImportContexts_Impl;
|
||||
typedef std::stack<css::uno::Reference<css::xml::sax::XFastContextHandler>>
|
||||
typedef o3tl::stack<SvXMLImportContextRef> SvXMLImportContexts_Impl;
|
||||
typedef o3tl::stack<css::uno::Reference<css::xml::sax::XFastContextHandler>>
|
||||
FastSvXMLImportContexts_Impl;
|
||||
|
||||
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.
Loading…
x
Reference in New Issue
Block a user