From: Wilfried Göesgens Date: Sun, 24 Aug 2008 19:25:43 +0000 (+0000) Subject: * fix Nullpointer Access in msgescputs X-Git-Tag: v7.86~2006 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=63535dea0c5783780590a9e13fb87b2cf6999f39 * fix Nullpointer Access in msgescputs * some smarter handling of conditional tokens --- diff --git a/webcit/subst.c b/webcit/subst.c index c46b0855e..8acbcc2dc 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -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) diff --git a/webcit/webcit.c b/webcit/webcit.c index e2d17f406..12b3b1e8f 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -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(); } diff --git a/webcit/who.c b/webcit/who.c index 112487aaf..0cffbebde 100644 --- a/webcit/who.c +++ b/webcit/who.c @@ -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);