On Sat, Feb 26, 2022 at 10:55:59AM +0100, prx wrote:
> First, thank you for your interest!
> 
> > > Shouldn't we check for truncation on strlcpy and strlcat and goto fail
> > > in that event?
> > 
> > With goto abort we get an 500 internal server error.
> > 
> 
> Moreover, if the strlcpy and strlcat failed, then the file requested 
> (gpath) is obviously not found, and httpd switch back to original path.
> 
> But to avoid unexpected behaviour, maybe something like this can be enough ?
> 

I'd prefer the hard failure. I'm sure someone else will chime in if they
think otherwise. Thanks! :)

> ```
>         int             gztoolong = 0;
> 
>         /* check Accept-Encoding header */
>         key.kv_key = "Accept-Encoding";
>         r = kv_find(&req->http_headers, &key);
> 
>         if (r != NULL) {
>             if (strstr(r->kv_value, "gzip") != NULL) {
>                 /* append ".gz" to path and check existence */
>                 if (strlcpy(gzpath, path, sizeof(gzpath)) >= sizeof(gzpath))
>                     gztoolong = 1;
>                 if (strlcat(gzpath, ".gz", sizeof(gzpath)) >= sizeof(gzpath))
>                     gztoolong = 1;
> 
>                 if ((gztoolong == 0) &&
>                     (access(gzpath, R_OK) == 0) &&
>                     (stat(gzpath, &gzst) == 0)) {
>                     path = gzpath;
>                     st = &gzst;
>                     kv_add(&resp->http_headers,
>                         "Content-Encoding", "gzip");
>                 }
> ```
> 

-- 

Tracey Emery

Reply via email to