From e63f9a319f589e08ce611fc165fe82449c9bf633 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Fri, 21 Oct 2016 17:17:43 +0200 Subject: [PATCH] Raise error if length of exported symbols exceeds boost::serialization limit --- codegen/main.cpp | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-) diff --git a/codegen/main.cpp b/codegen/main.cpp index 105dc24..7271b22 100644 --- a/codegen/main.cpp +++ b/codegen/main.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include "config.h" @@ -142,6 +143,15 @@ struct parse_error : public std::runtime_error {} }; +struct error_name_too_long : public std::runtime_error +{ + error_name_too_long(const std::string &name) + : std::runtime_error("symbol name '" + name + "' too long for serialization (" + + boost::lexical_cast(name.length()) + ">" + + boost::lexical_cast(BOOST_SERIALIZATION_MAX_KEY_SIZE-1) + ")") + {} +}; + //! get type by id /*! \return type name or empty string on error @@ -224,11 +234,17 @@ struct t2n_procedure std::string ret_classname() const { - return name+mangled+"_res"; + std::string result = name+mangled+"_res"; + if (result.length() >= BOOST_SERIALIZATION_MAX_KEY_SIZE) + throw error_name_too_long(result); + return result; } std::string cmd_classname() const { - return name+mangled+"_cmd"; + std::string result = name+mangled+"_cmd"; + if (result.length() >= BOOST_SERIALIZATION_MAX_KEY_SIZE) + throw error_name_too_long(result); + return result; } bool hasReturn() const {return !ret_type.isVoid();} }; -- 1.7.1