summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2010-03-01 12:44:57 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2010-03-01 12:44:57 +0100
commit01e6df368cdec89920d075fe096971481cb8ce49 (patch)
treea4052d5cb4b2f4047a951f3526b8853a70f96272 /runtime
parent8021912232ed1cc14b9175e7efaa7d8961940c3e (diff)
downloadrsyslog-01e6df368cdec89920d075fe096971481cb8ce49.tar.gz
rsyslog-01e6df368cdec89920d075fe096971481cb8ce49.tar.xz
rsyslog-01e6df368cdec89920d075fe096971481cb8ce49.zip
bugfix: comment char ('#') in literal terminated script parsing
...and thus could not be used. but tracker: http://bugzilla.adiscon.com/show_bug.cgi?id=119
Diffstat (limited to 'runtime')
-rw-r--r--runtime/ctok.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/runtime/ctok.c b/runtime/ctok.c
index ceab15bd..71a10a20 100644
--- a/runtime/ctok.c
+++ b/runtime/ctok.c
@@ -87,11 +87,12 @@ ctokUngetCharFromStream(ctok_t *pThis, uchar __attribute__((unused)) c)
}
-/* get the next character from the input "stream" (currently just a in-memory
- * string...) -- rgerhards, 2008-02-19
+/* get the next character from the input "stream". Note that this version
+ * does NOT look for comment characters as end-of-stream, so it is suitable
+ * when building constant strings! -- rgerhards, 2010-03-01
*/
-static rsRetVal
-ctokGetCharFromStream(ctok_t *pThis, uchar *pc)
+static inline rsRetVal
+ctokGetCharFromStreamNoComment(ctok_t *pThis, uchar *pc)
{
DEFiRet;
@@ -99,7 +100,7 @@ ctokGetCharFromStream(ctok_t *pThis, uchar *pc)
ASSERT(pc != NULL);
/* end of string or begin of comment terminates the "stream" */
- if(*pThis->pp == '\0' || *pThis->pp == '#') {
+ if(*pThis->pp == '\0') {
ABORT_FINALIZE(RS_RET_EOS);
} else {
*pc = *pThis->pp;
@@ -111,6 +112,28 @@ finalize_it:
}
+/* get the next character from the input "stream" (currently just a in-memory
+ * string...) -- rgerhards, 2008-02-19
+ */
+static rsRetVal
+ctokGetCharFromStream(ctok_t *pThis, uchar *pc)
+{
+ DEFiRet;
+
+ ISOBJ_TYPE_assert(pThis, ctok);
+ ASSERT(pc != NULL);
+
+ CHKiRet(ctokGetCharFromStreamNoComment(pThis, pc));
+ /* begin of comment terminates the "stream"! */
+ if(*pc == '#') {
+ ABORT_FINALIZE(RS_RET_EOS);
+ }
+
+finalize_it:
+ RETiRet;
+}
+
+
/* skip whitespace in the input "stream".
* rgerhards, 2008-02-19
*/
@@ -297,7 +320,7 @@ ctokGetSimpStr(ctok_t *pThis, ctok_token_t *pToken)
pToken->tok = ctok_SIMPSTR;
CHKiRet(rsCStrConstruct(&pstrVal));
- CHKiRet(ctokGetCharFromStream(pThis, &c));
+ CHKiRet(ctokGetCharFromStreamNoComment(pThis, &c));
/* while we are in escape mode (had a backslash), no sequence
* terminates the loop. If outside, it is terminated by a single quote.
*/
@@ -312,7 +335,7 @@ ctokGetSimpStr(ctok_t *pThis, ctok_token_t *pToken)
CHKiRet(rsCStrAppendChar(pstrVal, c));
}
}
- CHKiRet(ctokGetCharFromStream(pThis, &c));
+ CHKiRet(ctokGetCharFromStreamNoComment(pThis, &c));
}
CHKiRet(rsCStrFinish(pStrB));