* fix Nullpointer Access in msgescputs
authorWilfried Göesgens <willi@citadel.org>
Sun, 24 Aug 2008 19:25:43 +0000 (19:25 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 24 Aug 2008 19:25:43 +0000 (19:25 +0000)
* some smarter handling of conditional tokens

webcit/subst.c
webcit/webcit.c
webcit/who.c

index c46b0855edc64c1719df2edb8b1bcdc6cee14fad..8acbcc2dc766e497599d23ad7967beab97882e5b 100644 (file)
@@ -389,6 +389,9 @@ void print_value_of(StrBuf *Target, const char *keyname, size_t keylen) {
        if (keyname[0] == '=') {
                DoTemplate(keyname+1, keylen - 1, NULL, NULL);
        }
+
+//////TODO: if param[1] == "U" -> urlescape
+/// X -> escputs
        /** Page-local variables */
        if ((WCC->vars!= NULL) && GetHash(WCC->vars, keyname, keylen, &vVar)) {
                ptr = (wcsubst*) vVar;
@@ -982,7 +985,7 @@ int ConditionalVar(WCTemplateToken *Tokens, void *Context)
        switch(subst->wcs_type) {
        case WCS_STRING:
                if (Tokens->nParameters < 4)
-                       return 0;
+                       return 1;
                return (strcmp(Tokens->Params[3]->Start, subst->wcs_value) == 0);
        case WCS_SERVCMD:
                lprintf(1, "  -> Server [%s]\n", subst->wcs_value);////todo
@@ -992,7 +995,7 @@ int ConditionalVar(WCTemplateToken *Tokens, void *Context)
        case WCS_STRBUF:
        case WCS_STRBUF_REF:
                if (Tokens->nParameters < 4)
-                       return 0;
+                       return 1;
                return (strcmp(Tokens->Params[3]->Start, ChrPtr((StrBuf*) subst->wcs_function)) == 0);
        case WCS_LONG:
                if (Tokens->nParameters < 4)
index e2d17f406c9e648ed09861092cd837bfe068dc07..12b3b1e8f0bb7e1ef11681714ecda81a01998e4e 100644 (file)
@@ -613,6 +613,8 @@ void msgescputs1( char *strbuf)
 {
        StrBuf *OutBuf = NewStrBuf();
 
+       if ((strbuf == NULL) || IsEmptyStr(strbuf))
+               return;
        StrMsgEscAppend(OutBuf, NULL, strbuf);
        StrEscAppend(WC->WBuf, OutBuf, NULL, 0, 0);
 }
@@ -621,7 +623,8 @@ void msgescputs1( char *strbuf)
  * print a string to the client after cleaning it with msgesc()
  */
 void msgescputs(char *strbuf) {
-       StrMsgEscAppend(WC->WBuf, NULL, strbuf);
+       if ((strbuf != NULL) && !IsEmptyStr(strbuf))
+               StrMsgEscAppend(WC->WBuf, NULL, strbuf);
 }
 
 
@@ -1050,6 +1053,7 @@ void blank_page(void) {
 void url_do_template(void) {
        const StrBuf *Tmpl = sbstr("template");
        begin_burst();
+       output_headers(1, 0, 0, 0, 1, 0);
        DoTemplate(ChrPtr(Tmpl), StrLength(Tmpl), NULL, NULL);
        end_burst();
 }
index 112487aaf05a275c022d0dfe1ac6ab4a7fe2c185..0cffbebde0dbebe3c87ff1cb70d68167c86c69c7 100644 (file)
@@ -472,6 +472,7 @@ void WholistSubst(StrBuf *TemplBuffer, void *vContext)
        SVPutBuf("WHO:REALROOM", User->RealRoom, 1);
        SVPutBuf("WHO:REALHOST", User->RealHost, 1);
        svputlong("WHO:LASTACTIVE", User->LastActive);
+       ///svputlong("WHO:IDLESINCE",(now - User->LastActive) / 60);//// todo
        svputlong("WHO:SESSION", User->Session);
        svputlong("WHO:IDLE", User->Idle);
        svputlong("WHO:NSESSIONS", User->SessionCount);