// currently only SSL error details implemented
else if (detail) {
const String &errDetail = detail->toString();
- MemBuf *detail_mb = ConvertText(errDetail.termedBuf(), false);
- mb.append(detail_mb->content(), detail_mb->contentSize());
- delete detail_mb;
- do_quote = 0;
- } else
+ if (errDetail.defined()) {
+ MemBuf *detail_mb = ConvertText(errDetail.termedBuf(), false);
+ mb.append(detail_mb->content(), detail_mb->contentSize());
+ delete detail_mb;
+ do_quote = 0;
+ }
+ }
#endif
+ if (!mb.contentSize())
mb.Printf("[No Error Detail]");
break;
const char *detail;
};
+static const char *SslErrorDetailDefaultStr = "SSL certificate validation error (%err_name): %ssl_subject";
// TODO: optimize by replacing with std::map or similar
static SslErrorDetailEntry TheSslDetailMap[] = {
{ SQUID_X509_V_ERR_DOMAIN_MISMATCH,
return TheSslDetailMap[i].detail;
}
- return NULL;
+ // we must always return something because ErrorDetail::buildDetail
+ // will hit an assertion
+ return SslErrorDetailDefaultStr;
}
Ssl::ErrorDetail::err_frm_code Ssl::ErrorDetail::ErrorFormatingCodes[] = {
*/
const char *Ssl::ErrorDetail::err_code() const
{
+ static char tmpBuffer[64];
const char *err = getErrorName(error_no);
- if (!err)
- return "[Not available]";
+ if (!err) {
+ snprintf(tmpBuffer, 64, "%d", (int)error_no);
+ err = tmpBuffer;
+ }
return err;
}
char const *t;
int code_len = 0;
- if (!s) //May be add a default detail string?
- return;
-
+ assert(s);
while ((p = strchr(s, '%'))) {
errDetailStr.append(s, p - s);
code_len = convert(++p, &t);