From e61f190ef6d44e317bf4c28ec48c21779efab746 Mon Sep 17 00:00:00 2001 From: Mightyjo Date: Sat, 30 Jan 2021 15:43:23 -0500 Subject: Ensure size of Reject state buffer is sufficient each time yy_switch_to_buffer is called. --- src/FlexLexer.h | 1 + src/gen.c | 0 tests/Makefile.am | 6 +- tests/state_buf_multiple.direct.lll | 104 +++++++++ tests/state_buf_multiple.direct.txt | 446 ++++++++++++++++++++++++++++++++++++ 5 files changed, 556 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/gen.c create mode 100644 tests/state_buf_multiple.direct.lll create mode 100644 tests/state_buf_multiple.direct.txt diff --git a/src/FlexLexer.h b/src/FlexLexer.h index ccd9eeb..9b54949 100644 --- a/src/FlexLexer.h +++ b/src/FlexLexer.h @@ -202,6 +202,7 @@ protected: yy_state_type* yy_state_buf; yy_state_type* yy_state_ptr; + size_t yy_state_buf_max; char* yy_full_match; int* yy_full_state; diff --git a/src/gen.c b/src/gen.c old mode 100644 new mode 100755 diff --git a/tests/Makefile.am b/tests/Makefile.am index c6c6b9b..6ab4844 100755 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -96,7 +96,8 @@ DIRECT_TESTS = \ include_by_reentrant.direct \ rescan_nr.direct \ rescan_r.direct \ - state_buf.direct + state_buf.direct \ + state_buf_multiple.direct I3_TESTS = \ cxx_yywrap.i3 @@ -153,6 +154,7 @@ nodist_top_SOURCES = top.h yyextra_nr_SOURCES = yyextra_nr.l yyextra_c99_SOURCES = yyextra_c99.l state_buf_direct_SOURCES = state_buf.direct.lll +state_buf_multiple_direct_SOURCES = state_buf_multiple.direct.lll # Normally, automake would distribute files built by flex. Since the # point of the test suite is to test the files that flex builds, and @@ -220,6 +222,7 @@ CLEANFILES = \ yyextra_nr.c \ yyextra_c99.c \ state_buf.direct.cc \ + state_buf_multiple.direct.cc \ $(RULESET_REMOVABLES) dist-hook: @@ -288,6 +291,7 @@ EXTRA_DIST = \ yymorearraybol.txt \ yyunput.txt \ state_buf.direct.txt \ + state_buf_multiple.direct.txt \ $(RULESETS) dist_noinst_SCRIPTS = \ diff --git a/tests/state_buf_multiple.direct.lll b/tests/state_buf_multiple.direct.lll new file mode 100644 index 0000000..ee336a4 --- /dev/null +++ b/tests/state_buf_multiple.direct.lll @@ -0,0 +1,104 @@ +/* + * This file is part of flex. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +%{ +/* A template scanner file to build "scanner.cc". + The scanner tests that we correctly initialize the state buffer + for long input buffers owned by code that calls yylex. + + This tests guards against reversions to CVE-2006-0459, + in particular when variable trailing context rules are used. + */ +#include +#include +#include + +#define ECHO +%} + +%option prefix="test" +%option noyywrap + +ID [_a-zA-Z]+[_0-9a-zA-Z]* + +BBC1 ([^(]*|"("[^(]*")") + +/** + * Balanced Bracketed Content. + * May not contain bracket, but if it does then it is balanced. + */ +BBC ({BBC1}*|"("{BBC1}*")") + +FPD "("{BBC}*")" + +%% + +{ID}/{FPD}\{ { + return 1234; +} + +%% + +std::vector readFile(const char* filename) +{ + std::vector contents; + std::ifstream in(filename, std::ios::in | std::ios::binary); + if (in) + { + in.seekg(0, std::ios::end); + size_t size = static_cast(in.tellg()); + contents.resize(size + 2); + in.seekg(0, std::ios::beg); + in.read(contents.data(), size); + in.close(); + + contents[size + 0] = '\0'; + contents[size + 1] = '\0'; + } + else { + std::cerr << "*** Error: std::ifstream(" << filename << ") failed." << std::endl; + exit(-1); + } + return contents; +} + +int main(int argc, char** argv) +{ + if ( argc != 2 ) { + std::cerr << "*** Error: Must specify one filename." << std::endl; + exit(-1); + } + + std::vector stm = readFile( argv[1] ); + test_scan_buffer(stm.data(), stm.size()); + + testlex(); + + std::vector stm2(stm); + stm2.insert(stm2.end(), stm.begin(), stm.end()); + test_scan_buffer(stm2.data(), stm2.size()); + + testlex(); + + return 0; // All went well. +} diff --git a/tests/state_buf_multiple.direct.txt b/tests/state_buf_multiple.direct.txt new file mode 100644 index 0000000..858653c --- /dev/null +++ b/tests/state_buf_multiple.direct.txt @@ -0,0 +1,446 @@ +// +////////////////////////////////////////////////////////////////////////////// +// +// trsntupsm 2018 eemremad, dor. eoo tupsma tmamttme. +// +// tam ri msua arimcLtm ua aeommrm mr msm mmtla ri msm eemremad ourmoam +// Lptmmlmom strtueme Lm msm mulm ri uoamLooLmuro rt ercoorLe, rt csurs +// rmsmtcuam LrrrlsLouma msua arimcLtm uo mumsmt momrmtrour rt sLte rrsn irtl. +// +////////////////////////////////////////////////////////////////////////////// +// +#uioemi __eeeiecit_a +#emiuom __eeeiecit_a + +#uoroeem "torommrm.s" +#uoroeem "tortmtteom.s" +#uoroeem "eoue.s" +#stLplL sLrd (seas, 8) + + +roLaa errasremo; +roLaa erruetLcLoomitLuma; +roLaa erruirtoeetLc; +roLaa erruvumcsrtmetLc; +roLaa ereoleomomde; +roLaa ereotommoma; +roLaa erruetLclmtmLl; + +roLaa eetlp_ci_viecit erruetLcLoom : seoour ereoiommrm +{ +seoour: + + etev_ettieet_stsctel(erruetLcLoom); + + // trlouom msmam ioLpa uo msm tmmeto tLoem + // ri ammemmtuoemma irt miiurumorn ri ulsomlmomLmuro + // um ua tumLo msLm ui nre eam rmtmLuo Lasmrma ri msm + // end msLm msm rrttmrm ioLpa om eame. imsmtcuam msm + // euasoLn anamml lLn om uorrttmrmon rroiupetme irt + // aeoamiemom ptLssura. ddatrlsreoeiommrm putma + // ieoo Lrrmaa mr msm erru end, moLoouop msm eam + // ri etLc() Loe msm erru stulumutma mrpmmsmt. toLoouop + // msua lLdma msm moLortLmuro ri Lo rommrm lLtpuoLoon + // aorcmt. lr nre asreoe eam msm orcmam tLoem LsstrstuLmm. + // + // + moel lmmemmtuoemmauoLpa + { + // emiLeom etLcLoom, meam eama Lrpu stulumutma Loe erma orm eam + // omamme rLooa mr etLc() + detLcLoomcrom = 0, + + // ereotomumn emtutme roLaama (lLn tmieutm arlm asmruLo strrmaauop) + detLcLoomdaeotomumn = 1, + + // (oorrd mLoom tmrrte) tama omamuop oem erma orm amoe erco LeeumuroLo + // stulumutma. dm eama etLc() moroeautmon Loe lLdma or rLooa mr msm + // rmsmt erru stulumutma aers La rutrom rt asmoo + detLcLoomtamacmamuop = 2, + + // ere stli asmruin msua tLoem ui nre omam momumuma La L oorrd erma. + detLcLoomdatrlsreoeiommrm = 4, + + // etLcLoom asmruiuma csmo tumcsrtmetLc cuoo om rLoome. tlsorn + // smt-vumcsrtm rLrsuop ri tumcsrtmetLc pmrlmmtn. ea cmoo, msua + // etLcLoom erma orm eam crtoeetLc. + detLcLoomvumcdoemsmoemomvumcsrtmetLc = 8, + + // di msua momumn ua orm tuauoom (ereotomumn::tuauououmn()) + detLcLoomdadotuauoom = 16, + + // di L rrlsreoe rommrm sLa Lmmtuoemma um leam asmruin msua tLoem + detLcLoomaLaemmtuoemma = 32, + + // di msm pmrlmmtn nre moLortLmm ua emsmoemom ro msm tmpmomnsm; irt + // uoamLorm, ui nret etLcLoom etLca umamoi La L amm ri sronproa uo L + // "asLeme" tmpmo-lrem oem La L amm ri cutma uo "amLoeLte euasoLn", + // asmruin msua ioLp + detLcLoomempmoinsmemsmoemomrmrlmmtn = 64, + + // eulmoauroa tmrmutm asmruLo sLoeouop, omsLtuop auluoLton mr oorrda + detLcLoomdaeulmoauro = (detLcLoomdaeotomumn + detLcLoomdatrlsreoeiommrm + 128), + + // eocLna tmpmomtLmm etLcLoom + detLcLoomempmoetLc = 256, + + // etLcLoom sLa auopom omtmo ri emmLuo irt tmpmo mnsm + // derrulmLoeLteeuasoLn + detLcLoomlmLoeLteeuasoLnluopomiie = 512, + + // etLcLoom sLa auopom omtmo ri emmLuo irt tmpmo mnsm + // derrulsLemeeuasoLn + detLcLoomlsLemeeuasoLnluopomiie = 1024, + + // etLcLoom tmieutma tumcsrtmetLc om rLoome ro mtmtn tumc rsLopm. + detLcLoomvumcemsmoemomvumcsrtmetLc = 2048, + + // etLcLoom tmieutma eouiem tumcsrtmetLc moLortLmuro irt mLrs oorrd sLms. + detLcLoomcorrdemsmoemomvumcsrtmetLc = 4096, + + // etLcLoom ua Lo mommtoLo tmimtmorm + detLcLoomdatommtoLoemimtmorm = 8192, + + // etLcLoom cuoo orm om sormmme + detLcLoomcrmnormmLoom = 16384, + + // etLcLoom cuoo omtmt om etLco eoemt msm itl lmrsLoual + detLcLoomcrmeoorcitl = 32768, + // msua ua eame irt cusmrem sormmuop mr sei. + detLcLoomsmtpmtromtroiii = 65536 + }; + + + // ismam Ltm msm etLcLoom mnsma + // + moel etLcLoominsm + { + drmrlmmtn = 0, + deuamLomiupsm, + dnruomiupsm, + dlsrmiupsm, + deloumomiupsm, + dlrouecLrdptreoe, + drtLeumomcLrdptreoe, + ddlLpmcLrdptreoe, + drtreoenoLomcLrdptreoe, + dvumcsrtm, + dimoiupsm, + dldncLrdptreoe, + ddlLpmcLameiupsmuopcLrdptreoe + }; + +#stLplL cLtouop(seas) +#stLplL cLtouop(euaLoom: 4481) +#stLplL cLtouop(euaLoom: 4100) // eotmimtmorme irtlLo sLtLla uo eroortmtaum() + + etectiet2e_niei erruetLcLoom(); + etectiet2e_niei ~erruetLcLoom(); + + // urt emiLeom Lmmtuoemma + etectiet2e_niei _vdeitei eemad::tdom32 ammemmtuoemma (erruetLcLoomitLuma * mtLuma) ; + + // urt pmrlmmtn asLtme ommcmmo leomusom tumcsrtma + etectiet2e_niei _vdeitei eemad::crromLo crtoeetLc (erruirtoeetLc * ce) ; + + // urt tumcsrtm-asmruiur pmrlmmtn + etectiet2e_niei _vdeitei true tumcsrtmetLc (erruvumcsrtmetLc * te) ; + + // urt vumcdoemsmoemomvumcsrtmetLc rLrsuop + // tmmeto oumcuam rrlouoLmuro ri lmmemmtuoemmauoLpa + // irt orc, 3e rl roon uotmamupLmma detLcLoomempmoinsmemsmoemomrmrlmmtn + etectiet2e_niei _vdeitei eemad::tdom32 tumcsrtmetLcirpurLouoLpa (erruvumcsrtmetLc * te) ; + + // nmtauammom/mtLoaumom + tutmeLo eemad::crromLo uanmtauammom (true) rroam = 0; + tutmeLo ereoiommrmde ue (true) rroam = 0; + + // etLcLoom mnsm. + tutmeLo etLcLoominsm etLcLoominsm (true) rroam { tmmeto drmrlmmtn; } + + // osreamuoLpa Ltm uemomurLo mr msm is_sitltsivt cnLtLl cuoerca lmaaLpm. lmm slec irt msram ioLpa, msmn Ltm strtueme La ua. + // tmamm ua mtem ui troortmt ua tmammmuop rt omLtuop nret rommrm. + // tmmeto mtem ui nre cLom troortmt mr mtLrd nret rommrm, iLoam mr uportm um. + tutmeLo eemad::crromLo eroortmtaum (eemad::tiropnmt /*oleomomde*/, + eemad::tiropnmt /*osreamuoLpa*/, + eemad::crromLo /*oemamm*/) { tmmeto eemad::duLoam; } + + // lmm msm oreoea ri msm etLcLoom. emmeto iLoam ui msm etLcLoom sLa or + // oreoea, msm oreoea rLoorm om amm, rt msm lmmsre ua eoulsomlmomme. + tutmeLo orro oreoea (ereotommoma& /*oreoea*/) rroam { tmmeto iLoam; } + + // etLc amtmLl + etectiet2e_niei tutmeLo true ammetLclmtmLl (erruetLclmtmLl * slmtmLl); + etectiet2e_niei tutmeLo erruetLclmtmLl* etLclmtmLl (true) rroam; + +#stLplL cLtouop(srs) + +strmmrmme: + itumoe roLaa erruetLcLoomitmtteom; + + tutmeLo eemad::tdom32 aeolmmemmtuoemma (erruetLcLoomitLuma * mtLuma) = 0; + + tutmeLo eemad::crromLo aeoirtoeetLc (erruirtoeetLc * ce) = 0; + + tutmeLo true aeovumcsrtmetLc (erruvumcsrtmetLc * te) = 0; + + tutmeLo eemad::tdom32 aeovumcsrtmetLcirpurLouoLpa (erruvumcsrtmetLc * /*te*/) { tmmeto 0; } + +stutLmm: + itumoe roLaa erruetLcLoomerrmaartn; + + roLaa erruetLcLoomerrmaartn* l_serrmaartn; +}; + +/// +/// +/// +/// erruetLcLoomitmtteom rtmtteoma L aeoamm ri etLc tmoLmme +/// rsmtLmuroa msLm erruetLcLoom roLaa asmruiuma. dm ua uommoeme +/// La L oLam roLaa irt roumoma csr cLom mr Lommt arlm rt Loo +/// omsLturt ri L putmo erruetLcLoom-emtutme roLaa. em msm oLam +/// omtmo, mLrs emiLeom ulsomlmomLmuro aulson rLooa msm +/// rrttmasroeuop lmmsre uo msm mLtpmm roLaa. +/// +roLaa erruetLcLoomitmtteom : seoour ereoitmtteom +{ +seoour: + etev_ettieet_stsctel(erruetLcLoomitmtteom); + + etectiet2e_niei erruetLcLoomitmtteom(); + /// + /// + /// + /// itmtteoma erruetLcLoom::ammemmtuoemma lmmsre. + /// + /// + /// ism emiLeom ulsomlmomLmuro ri + /// erruetLcLoomitmtteom::ammemmtuoemma rLooa + /// erruetLcLoom::aeolmmemmtuoemma. + /// + /// nruommt mr Lo ereoiommrm msLm msua + /// rtmtteom ua Lssoume LpLuoam. + /// nruommt mr msm ptLssura mtLuma. + etectiet2e_niei tutmeLo eemad::tdom32 ammemmtuoemma (erruetLcLoom* sleommrm, erruetLcLoomitLuma * mtLuma); + /// + /// + /// + /// itmtteoma erruetLcLoom::crtoeetLc. + /// + /// nruommt mr Lo ereoiommrm msLm msua + /// rtmtteom ua Lssoume LpLuoam. + /// nruommt mr msm ptLssura mtLuma. + /// + /// ism emiLeom ulsomlmomLmuro ri erruetLcLoomitmtteom::crtoeetLc + /// rLooa msm strmmrmme tutmeLo erruetLcLoom::aeoirtoeetLc + /// lmmsre. + /// + etectiet2e_niei tutmeLo eemad::crromLo crtoeetLc (erruetLcLoom* sleommrm, erruirtoeetLc * ce); + /// + /// + /// + /// itmtteoma erruetLcLoom::tumcsrtmetLc lmmsre. + /// + /// + /// emiLeom ulsomlmomLmuro ri erruetLcLoomitmtteom::tumcsrtmetLc + /// rLooa strmmrmme tutmeLo erruetLcLoom::aeovumcsrtmetLc lmmsre. + /// + /// + etectiet2e_niei tutmeLo true tumcsrtmetLc (erruetLcLoom* sleommrm, erruvumcsrtmetLc * te); + /// + /// + /// + /// itmtteoma erruetLcLoom::tumcsrtmetLcirpurLouoLpa lmmsre. + /// + /// + /// ism emiLeom ulsomlmomLmuro ri erruetLcLoomitmtteom:: + /// tumcsrtmetLcirpurLouoLpa rLooa msm strmmrmme tutmeLo + /// erruetLcLoom:: aeovumcsrtmetLcirpurLouoLpa lmmsre. + /// + etectiet2e_niei tutmeLo eemad::tdom32 tumcsrtmetLcirpurLouoLpa (erruetLcLoom* sleommrm, erruvumcsrtmetLc * te); +}; + +/// +/// erruetLcLoomemLrmrt strtuema ormuiurLmuroa ri dmn erruetLcLoom- +/// tmoLmme mtmoma uoroeeuop ompuo/moe tmpmo, lreuiurLmuro, Loe +/// mtLaetm. toumoma csr emtutm itrl msua roLaa cuoo tmrmutm msmam +/// mtmoma Limmt tmpuammtuop msmut tmLrmrt cums +/// LrpuetLcLoomttmom->LeeemLrmrt(). +/// +roLaa etectiet2e_niei erruetLcLoomemLrmrt : seoour ereoiommrm +{ +seoour: + etev_ettieet_stsctel(erruetLcLoomemLrmrt); + + /// + /// ism ptLssura anamml csurs ua tmpmomtLmuop msm etLcLoom. + /// + moel empmouoLpa + { + d2eempmo, + d3eempmo + }; + + /// + /// isua mtmom aupoLoa msm ompuoouop ri L etLcLoom'a tmpmo. + /// + /// dosem etLcLoom Lorem mr om tmpmomtLmme. + /// dosem ptLssura anamml msLm cuoo smtirtl msm tmpmo. + tutmeLo true ompuoempmo (erruetLcLoom* /*setLcLoom*/, empmouoLpa /*ioLpa*/) {} + + /// + /// isua mtmom aupoLoa msm moe ri L etLcLoom'a tmpmo. + /// + /// dosem etLcLoom msLm cLa tmpmomtLmme. + /// dosem ptLssura anamml msLm smtirtlme msm tmpmo. + tutmeLo true moeempmo (erruetLcLoom* /*setLcLoom*/, empmouoLpa /*ioLpa*/) {} + + /// + /// isua mtmom aupoLoa msm lreuiurLmuro ri L etLcLoom'a ptLssura. + /// + /// dosem etLcLoom csram ptLssura cmtm lreuiume. + tutmeLo true lreuiume (erruetLcLoom* /*setLcLoom*/) {} + + /// + /// isua mtmom aupoLoa msm mtLaetm ri L etLcLoom'a ptLssura. + /// + /// dosem etLcLoom csram ptLssura cmtm mtLame. + tutmeLo true mtLame (erruetLcLoom* /*setLcLoom*/) {} + + /// + /// isua mtmom aupoLoa ptLssura Ltm omuop sLoeme rtmt itrl rom etLcLoom mr Lormsmt etLcLoom. + /// + /// dosem etLcLoom itrl csurs ptLssura cuoo om sLoeme rtmt. + /// dosem etLcLoom mr csurs ptLssura cuoo om sLoeme rtmt. + tutmeLo true sLoeitmtir (erruetLcLoom* /*setLcLoomutrl*/, erruetLcLoom* /*setLcLoomir*/) {} + + /// + /// isua mtmom aupoLoa msm mtLaetm ri L etLcLoom'a ptLssura. + /// + /// dosem etLcLoom csram ptLssura cmtm mtLame. + /// dosem ue ri sLtmom etLcLoom. + tutmeLo true mtLame(erruetLcLoom* /*setLcLoom*/, eemad::domeode /*sLtmomde*/) {} + + /// + /// isua mtmom aupoLoa msm lreuiurLmuro ri L etLcLoom'a ptLssura. + /// + /// dosem etLcLoom csram ptLssura cmtm lreuiume. + /// dosem ue ri sLtmom etLcLoom. + tutmeLo true lreuiume(erruetLcLoom* /*setLcLoom*/, eemad::domeode /*sLtmomde*/) {} + + /// + /// isua mtmom aupoLoa msm Leeumuro ri L etLcLoom'a ptLssura. + /// + /// dosem etLcLoom csram ptLssura cmtm Leeme. + /// dosem ue ri sLtmom etLcLoom. + /// dosem eLmLoLam sruommt rLam La iicr_nie. + tutmeLo true Leeme(erruetLcLoom* /*setLcLoom*/, eemad::domeode /*sLtmomde*/, eemad::iropnmt /*eLmLoLamnmt*/) {} +}; + +/// +/// erruetLcLoomttmom lLoLpma L amm ri erruetLcLoomemLrmrta Loe amoea +/// ormuiurLmuroa mr msml csmo rmtmLuo mtmoma rrret. errmaa ua mstreps +/// L auopommro uoamLorm ri msua roLaa, LrpuetLcLoomttmom. toumoma ri +/// erruetLcLoomttmom iLoo uomr mstmm rLmmprtuma: +/// +/// 1. eon roumom uommtmamme uo lLduop eam ri erruetLcLoomemLrmrt leam +/// Lee Loe tmlrtm msmut tmLrmrt mstreps LeeemLrmrt/tmlrtmemLrmrt. +/// +/// 2. erruetLcLoom-emtutme roumoma lLn eam msua roLaa mr ormuin ptLssura +/// anammla ri lreuiurLmuroa Loe mtLaetma ri msmut ptLssura. +/// +/// 3. rtLssura anammla lLn eam msua roLaa mr ormuin uommtmamme ouammomta +/// (m.p. erruetLclmtmLl) ri tmpmo ompuo/moe mtmoma. +/// +#emiuom LrpuetLcLoomttmom (&erruetLcLoomttmom::uoamLorm()) + +roLaa erruetLcLoomttmom : seoour ereoiommrm +{ +seoour: + etev_ettieet_stsctel(erruetLcLoomttmom); + + + /// + /// isua amLmur lmmsre tmmetoa msm auopommro uoamLorm ri msua roLaa. tam msm LrpuetLcLoomttmom lLrtr irt rrotmoumorm. + /// + /// ism rom erruetLcLoomttmom. + etectiet2e_niei amLmur erruetLcLoomttmom& uoamLorm(); + + /// + /// eee msm tmLrmrt mr msm ouam ri tmLrmrta msLm Ltm ormuiume csmo etLcLoom mtmoma rrret. + /// + /// dosem tmLrmrt mr moLoom ormuiurLmuro ri etLcLoom mtmoma. + tutmeLo true LeeemLrmrt (erruetLcLoomemLrmrt* semLrmrt); + + /// + /// emlrtm msm tmLrmrt itrl msm ouam ri tmLrmrta msLm Ltm ormuiume csmo etLcLoom mtmoma rrret. + /// + /// dosem tmLrmrt mr euaLoom ormuiurLmuro ri etLcLoom mtmoma. + tutmeLo true tmlrtmemLrmrt (erruetLcLoomemLrmrt* semLrmrt); + + /// + /// lupoLo msm ompuoouop ri L etLcLoom'a tmpmo mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom Lorem mr om tmpmomtLmme. + /// dosem ptLssura anamml msLm cuoo smtirtl msm tmpmo. + tutmeLo true amoecmpuoempmo (erruetLcLoom* setLcLoom, erruetLcLoomemLrmrt::empmouoLpa ioLpa); + + /// + /// lupoLo msm moe ri L etLcLoom'a tmpmo mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom msLm cLa tmpmomtLmme. + /// dosem ptLssura anamml msLm smtirtlme msm tmpmo. + tutmeLo true amoetoeempmo (erruetLcLoom* setLcLoom, erruetLcLoomemLrmrt::empmouoLpa ioLpa); + + /// + /// lupoLo msm lreuiurLmuro ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom csram ptLssura cmtm lreuiume. + tutmeLo true amoesreuiume (erruetLcLoom* setLcLoom); + + /// + /// lupoLo msm mtLaetm ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom csram ptLssura cmtm mtLame. + tutmeLo true amoettLame (erruetLcLoom* setLcLoom); + + /// + /// lupoLo ptLssura Ltm omuop sLoeme rtmt itrl rom etLcLoom mr Lormsmt etLcLoom. + /// + /// dosem etLcLoom itrl csurs ptLssura cuoo om sLoeme rtmt. + /// dosem etLcLoom mr csurs ptLssura cuoo om sLoeme rtmt. + tutmeLo true amoeaLoeitmtir (erruetLcLoom* setLcLoomutrl, erruetLcLoom* setLcLoomir); + + /// + /// lupoLo msm mtLaetm ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom csram ptLssura cmtm mtLame. + /// dosem ue ri sLtmom etLcLoom. + tutmeLo true amoettLame (erruetLcLoom* setLcLoom, eemad::domeode sLtmomde); + + /// + /// lupoLo msm lreuiurLmuro ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom csram ptLssura cmtm lreuiume. + /// dosem ue ri sLtmom etLcLoom. + tutmeLo true amoesreuiume (erruetLcLoom* setLcLoom, eemad::domeode sLtmomde); + + /// + /// lupoLo msm Leeumuro ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. + /// + /// dosem etLcLoom csram ptLssura cmtm Leeme. + /// dosem ue ri sLtmom etLcLoom. + /// dosem eLmLoLam sruommt rLam La iicr_nie. + tutmeLo true amoeeeeme (erruetLcLoom* setLcLoom, eemad::domeode sLtmomde, eemad::iropnmt eLmLoLamnmt); + +stutLmm: + erruetLcLoomttmom (); + erruetLcLoomttmom (rroam erruetLcLoomttmom&); + true rsmtLmrt= (rroam erruetLcLoomttmom&); + ~erruetLcLoomttmom (); + + roLaa errudlsetLcLoomttmom* l_sdls; +}; + +#stLplL sLrd (srs) +#moeui // __eeeiecit_a -- cgit v1.2.1