/******************************************************************************
** libDXFrw - Library to read/write DXF files (ascii & binary) **
** **
** Copyright (C) 2016-2022 A. Stebich (librecad@mail.lordofbikes.de) **
** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com **
** **
** This library is free software, licensed under the terms of the GNU **
** General Public License as published by the Free Software Foundation, **
** either version 2 of the License, or (at your option) any later version. **
** You should have received a copy of the GNU General Public License **
** along with this program. If not, see . **
******************************************************************************/
#ifndef DRW_RESERVE_H
#define DRW_RESERVE_H
#include
#include "intern/drw_dbg.h"
namespace DRW
{
/**
* Template to protect vector<>.reserve() calls.
* Malformed or suspicious input files can cause std::exceptions,
* which are caught here to avoid crashes or other vulnerabilities.
*/
template
auto reserve(std::vector &list, const int size) -> bool
{
try {
list.reserve(static_cast::size_type>(size));
}
catch (const std::exception& e) {
DRW_DBG( "std::exception : ");
DRW_DBG( e.what());
DRW_DBG( " - ");
DRW_DBG( size);
DRW_DBG( "\n");
return false;
}
catch (...) {
DRW_DBG( "vector<>.reserve() exception : ");
DRW_DBG( size);
DRW_DBG( "\n");
return false;
}
return true;
}
} // namespace DRW
#endif // DRW_RESERVE_H