From: Wilfried Göesgens Date: Thu, 11 Jun 2009 08:20:08 +0000 (+0000) Subject: * catch empty string conditions in tokens. X-Git-Tag: v7.86~1086 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=9da48ab668384cb4a81dbba270ca4ba17e9abce0;p=citadel.git * catch empty string conditions in tokens. --- diff --git a/webcit/subst.c b/webcit/subst.c index 3c9385f59..3d9fc5392 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -38,6 +38,8 @@ int dbg_bactrace_template_errors = 0; WCTemplputParams NoCtx; StrBuf *I18nDump = NULL; +const char EmptyStr[]=""; + #define SV_GETTEXT 1 #define SV_CONDITIONAL 2 #define SV_NEG_CONDITIONAL 3 @@ -776,11 +778,27 @@ void GetTemplateTokenString(StrBuf *Target, *len = TP->Tokens->Params[N]->len; break; case TYPE_BSTR: + if (TP->Tokens->Params[N]->len == 0) { + LogTemplateError(Target, + "TokenParameter", N, TP, + "Requesting parameter %d; of type BSTR, empty lookup string not admitted.", N); + *len = 0; + *Value = EmptyStr; + break; + } Buf = (StrBuf*) SBstr(TKEY(N)); *Value = ChrPtr(Buf); *len = StrLength(Buf); break; case TYPE_PREFSTR: + if (TP->Tokens->Params[N]->len == 0) { + LogTemplateError(Target, + "TokenParameter", N, TP, + "Requesting parameter %d; of type PREFSTR, empty lookup string not admitted.", N); + *len = 0; + *Value = EmptyStr; + break; + } get_PREFERENCE(TKEY(N), &Buf); *Value = ChrPtr(Buf); *len = StrLength(Buf); @@ -800,6 +818,15 @@ void GetTemplateTokenString(StrBuf *Target, *len = strlen(*Value); break; case TYPE_SUBTEMPLATE: + if (TP->Tokens->Params[N]->len == 0) { + LogTemplateError(Target, + "TokenParameter", N, TP, + "Requesting parameter %d; of type SUBTEMPLATE, empty lookup string not admitted.", N); + *len = 0; + *Value = EmptyStr; + break; + } + memset(&SubTP, 0, sizeof(WCTemplputParams *)); SubTP.Context = TP->Context; SubTP.Filter.ContextType = TP->Filter.ContextType; @@ -836,18 +863,36 @@ long GetTemplateTokenNumber(StrBuf *Target, WCTemplputParams *TP, int N, long df return atol(TP->Tokens->Params[N]->Start); break; case TYPE_BSTR: + if (TP->Tokens->Params[N]->len == 0) { + LogTemplateError(Target, + "TokenParameter", N, TP, + "Requesting parameter %d; of type BSTR, empty lookup string not admitted.", N); + return 0; + } return LBstr(TKEY(N)); break; case TYPE_PREFSTR: LogTemplateError(Target, "TokenParameter", N, TP, "requesting a prefstring in param %d want a number", N); + if (TP->Tokens->Params[N]->len == 0) { + LogTemplateError(Target, + "TokenParameter", N, TP, + "Requesting parameter %d; of type PREFSTR, empty lookup string not admitted.", N); + return 0; + } if (get_PREF_LONG(TKEY(N), &Ret, dflt)) return Ret; return 0; case TYPE_LONG: return TP->Tokens->Params[N]->lvalue; case TYPE_PREFINT: + if (TP->Tokens->Params[N]->len == 0) { + LogTemplateError(Target, + "TokenParameter", N, TP, + "Requesting parameter %d; of type PREFINT, empty lookup string not admitted.", N); + return 0; + } if (get_PREF_LONG(TKEY(N), &Ret, dflt)) return Ret; return 0;