[sr-dev] git:kamailio_3.0: core: kamailio mode config parser fix

Daniel-Constantin Mierla miconda at gmail.com
Mon Nov 2 16:35:44 CET 2009


Module: sip-router
Branch: kamailio_3.0
Commit: dc2361c509d71d30d82ce6f268f3fd6b3fa28b44
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=dc2361c509d71d30d82ce6f268f3fd6b3fa28b44

Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Mon Nov  2 15:35:42 2009 +0100

core: kamailio mode config parser fix

- fixed bug in parsing pvars without (), when in #!KAMAILIO mode

Reported-by: Daniel-Constantin Mierla <miconda at gmail.com>

---

 cfg.lex |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/cfg.lex b/cfg.lex
index c9f09fc..e63cebf 100644
--- a/cfg.lex
+++ b/cfg.lex
@@ -104,6 +104,7 @@
 	#define SELECT_S                5
 	#define AVP_PVAR_S              6  /* avp or pvar */
 	#define PVAR_P_S                7  /* pvar: $(...)  or $foo(...)*/
+	#define PVARID_S                8  /* $foo.bar...*/
 	#define STR_BETWEEN_S		9
 	#define LINECOMMENT_S            10
 	#define DEFINE_S                11
@@ -169,7 +170,7 @@
 
 /* start conditions */
 %x STRING1 STRING2 STR_BETWEEN COMMENT COMMENT_LN ATTR SELECT AVP_PVAR PVAR_P 
-%x INCLF
+%x PVARID INCLF
 %x LINECOMMENT DEFINE_ID DEFINE_EOL IFDEF_ID IFDEF_EOL IFDEF_SKIP
 
 /* config script types : #!SER  or #!KAMAILIO or #!MAX_COMPAT */
@@ -982,6 +983,19 @@ EAT_ABLE	[\ \t\b\r]
 <PVAR_P>{LPAREN}			{ p_nest++; yymore(); }
 <PVAR_P>.					{ yymore(); }
 
+<PVARID>{ID}|'\.'			{yymore(); }
+<PVARID>{LPAREN}			{	state = PVAR_P_S; BEGIN(PVAR_P);
+								p_nest=1; yymore(); }
+<PVARID>.					{	yyless(yyleng-1);
+								count();
+								addstr(&s_buf, yytext, yyleng);
+								yylval.strval=s_buf.s;
+								memset(&s_buf, 0, sizeof(s_buf));
+								state=INITIAL_S;
+								BEGIN(INITIAL);
+								return PVAR;
+							}
+
 	/* if found retcode => it's a built-in pvar */
 <INITIAL>{RETCODE}			{ count(); yylval.strval=yytext; return PVAR; }
 
@@ -993,6 +1007,9 @@ EAT_ABLE	[\ \t\b\r]
 										return ATTR_MARK;
 										break;
 									case SR_COMPAT_KAMAILIO:
+										state=PVARID_S; BEGIN(PVARID);
+										yymore();
+										break;
 									case SR_COMPAT_MAX:
 									default: 
 										state=AVP_PVAR_S; BEGIN(AVP_PVAR);
@@ -1215,6 +1232,8 @@ EAT_ABLE	[\ \t\b\r]
 													" while parsing"
 													" avp name\n");
 											break;
+										case PVARID_S:
+											p_nest=0;
 										case PVAR_P_S: 
 											LOG(L_CRIT, "ERROR: unexpected EOF"
 													" while parsing pvar name"




More information about the sr-dev mailing list