diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2009-10-02 10:27:55 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2009-10-02 10:27:55 +0200 |
commit | f7f7d951fcbaa0f30b43c651dae36bcf31c91e78 (patch) | |
tree | 6b3cdb26c631d28f743ee44894d0ff19669b009b /runtime/parser.c | |
parent | 8d8d1f01e1cd6ae372088a3ebddc27983e9a0185 (diff) | |
parent | 4c8546fd6fb56d5439edb5a098c8f82bc8fc36aa (diff) | |
download | rsyslog-f7f7d951fcbaa0f30b43c651dae36bcf31c91e78.tar.gz rsyslog-f7f7d951fcbaa0f30b43c651dae36bcf31c91e78.tar.xz rsyslog-f7f7d951fcbaa0f30b43c651dae36bcf31c91e78.zip |
Merge branch 'v4-beta' into beta
Conflicts:
ChangeLog
configure.ac
doc/manual.html
runtime/rsyslog.h
tcpsrv.c
Diffstat (limited to 'runtime/parser.c')
-rw-r--r-- | runtime/parser.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/runtime/parser.c b/runtime/parser.c index db11ac5b..466066e7 100644 --- a/runtime/parser.c +++ b/runtime/parser.c @@ -167,6 +167,7 @@ sanitizeMessage(msg_t *pMsg) uchar szSanBuf[32*1024]; /* buffer used for sanitizing a string */ assert(pMsg != NULL); + assert(pMsg->iLenRawMsg > 0); # ifdef USE_NETZIP CHKiRet(uncompressMessage(pMsg)); @@ -254,6 +255,7 @@ finalize_it: RETiRet; } + /* Parse a received message. The object's rawmsg property is taken and * parsed according to the relevant standards. This can later be * extended to support configured parsers. @@ -264,6 +266,11 @@ rsRetVal parseMsg(msg_t *pMsg) DEFiRet; uchar *msg; int pri; + int lenMsg; + int iPriText; + + if(pMsg->iLenRawMsg == 0) + ABORT_FINALIZE(RS_RET_EMPTY_MSG); CHKiRet(sanitizeMessage(pMsg)); @@ -271,15 +278,17 @@ rsRetVal parseMsg(msg_t *pMsg) DBGPRINTF("msg parser: flags %x, from '%s', msg '%s'\n", pMsg->msgFlags, getRcvFrom(pMsg), pMsg->pszRawMsg); /* pull PRI */ - pri = DEFUPRI; + lenMsg = pMsg->iLenRawMsg; msg = pMsg->pszRawMsg; + pri = DEFUPRI; + iPriText = 0; if(*msg == '<') { /* while we process the PRI, we also fill the PRI textual representation * inside the msg object. This may not be ideal from an OOP point of view, * but it offers us performance... */ pri = 0; - while(isdigit((int) *++msg)) { + while(--lenMsg > 0 && isdigit((int) *++msg)) { pri = 10 * pri + (*msg - '0'); } if(*msg == '>') |