The format string is a multiplier of length.  4k repeated %Y elements in
the 'a' variable's format string is 8kbytes in the format string, but the
result would take 16kbytes.  Then you have things like %B: the full month
name according to the current locale.  You cannot really predict the length
without actually doing the strftime.

I figured 256 bytes is more than reasonable.  Normal time strings are < 32
bytes; double that, and quadruple that again (e.g. if there are utf-8 chars
in the string), and you get 256 bytes.  If people need more, one can use in
LogFormat %{formatstring1}t%{formatstring2}t.


On Fri, Dec 13, 2013 at 10:14 AM, Yann Ylavic <ylavic....@gmail.com> wrote:

> On Fri, Dec 13, 2013 at 5:06 AM, Daniel Lescohier <
> daniel.lescoh...@cbsi.com> wrote:
>
>> Here is my draft replacement:
>>
>> static const char *log_request_time_custom(request_rec *r, char *a,
>>                                            apr_time_exp_t *xt)
>> {
>>     static const apr_size_t buf_len = 256;
>>     apr_size_t tstr_len;
>>     char *tstr = apr_palloc(r->pool, buf_len);
>>
>> apr_strftime(tstr, &tstr_len, buf_len, a, xt);
>>     return tstr_len ? tstr : "-";
>> }
>>
>
> Shouldn't [MAX_STRING_LEN > buf_len > strlen(a)] for apr_strftime() not to
> truncate the result (for any resonnable 'a')?
>
>

Reply via email to