Packets: Fix VariantParser invalid parser access bug
[senf.git] / Packets / VariantParser.ct
index 43ca23b..b0ba3e8 100644 (file)
@@ -1,8 +1,8 @@
 // $Id$
 //
-// Copyright (C) 2007 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer NETwork research (NET)
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
@@ -31,9 +31,9 @@
 #define prefix_
 ///////////////////////////////ct.p////////////////////////////////////////
 
-template <class VariantPolicy, SENF_PARSE_VARIANT_TPL_ARGS(class P)>
+template <class AuxPolicy, class Parsers>
 template <unsigned N>
-prefix_ void senf::VariantParser<VariantPolicy,SENF_PARSE_VARIANT_TPL_ARGS(P)>::init()
+prefix_ void senf::VariantParser<AuxPolicy,Parsers>::init()
 {
     unsigned oldSize( bytes() );
     typedef typename boost::mpl::at<parsers, boost::mpl::int_<N> >::type NewParser;
@@ -43,16 +43,17 @@ prefix_ void senf::VariantParser<VariantPolicy,SENF_PARSE_VARIANT_TPL_ARGS(P)>::
         std::advance(j, oldSize);
         std::fill(i(), j, 0u);
         safe_data_iterator safe_i (*this);
+        typename AuxPolicy::WrapperPolicy safeAux (static_cast<AuxPolicy&>(*this));
         data().insert(j, senf::init_bytes<NewParser>::value - oldSize, 0u);
-        VariantPolicy::variant(N, safe_i, state());
-        NewParser( VariantPolicy::begin(safe_i, state()), state() ).init();
+        safeAux.aux(N, safe_i, state());
+        NewParser( safeAux.adjust(safe_i, state()), state() ).init();
     } else {
         data_iterator j (i());
         std::advance(j, senf::init_bytes<NewParser>::value);
         data().erase(j, boost::next(i(), oldSize));
         std::fill(i(), j, 0u);
-        VariantPolicy::variant(N, i(), state());
-        NewParser(VariantPolicy::begin(i(), state()), state()).init();
+        AuxPolicy::aux(N, i(), state());
+        NewParser(AuxPolicy::adjust(i(), state()), state()).init();
     }
 }