libt2n-git Archives

Subject: C++ inter-process communication library branch, master, updated. v0.7-5-ge63f9a3

From: libt2n-git@xxxxxxxxxxxxxxxxxxxxxxx
To: libt2n-git@xxxxxxxxxxxxxxxxxxxxxxx
Date: Wed, 26 Oct 2016 17:17:00 +0200 (CEST)
The branch, master has been updated
       via  e63f9a319f589e08ce611fc165fe82449c9bf633 (commit)
      from  4bf435eb5495196183d4df0f74d6dc76d5dae955 (commit)


- Log -----------------------------------------------------------------
commit e63f9a319f589e08ce611fc165fe82449c9bf633
Author: Christian Herdtweck <christian.herdtweck@xxxxxxxxxxxxx>
Date:   Fri Oct 21 17:17:43 2016 +0200

    Raise error if length of exported symbols exceeds boost::serialization limit

-----------------------------------------------------------------------

Summary of changes:
 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 <stdexcept>
 #include <string>
 #include <boost/lexical_cast.hpp>
+#include <boost/serialization/extended_type_info.hpp>
 
 #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<std::string>(name.length()) + ">"
+                                 + 
boost::lexical_cast<std::string>(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();}
 };


hooks/post-receive
-- 
C++ inter-process communication library

--
libt2n-git - see http://www.intra2net.com/en/developer/libt2n for details.
To unsubscribe send a mail to libt2n-git+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread
  • C++ inter-process communication library branch, master, updated. v0.7-5-ge63f9a3, libt2n-git <=