--- server/util.c.orig 2013-05-28 23:17:53.000000000 +0200 +++ server/util.c.orig 2013-12-19 02:38:44.994088605 +0100 @@ -968,7 +968,7 @@ /* Read one line from open ap_configfile_t, strip LF, increase line number */ /* If custom handler does not define a getstr() function, read char by char */ static apr_status_t ap_cfg_getline_core(char *buf, apr_size_t bufsize, - ap_configfile_t *cfp) + ap_configfile_t *cfp, int buf_grown) { apr_status_t rc; /* If a "get string" function is defined, use it */ @@ -999,11 +999,11 @@ */ cp = cbuf; cp += strlen(cp); - if (cp > cbuf && cp[-1] == LF) { + if ((buf_grown || cp > cbuf) && cp[-1] == LF) { cp--; - if (cp > cbuf && cp[-1] == CR) + if ((buf_grown || cp > cbuf) && cp[-1] == CR) cp--; - if (cp > cbuf && cp[-1] == '\\') { + if ((buf_grown || cp > cbuf) && cp[-1] == '\\') { cp--; /* * line continuation requested - @@ -1043,7 +1043,7 @@ if (c == LF) { ++cfp->line_number; /* check for line continuation */ - if (i > 0 && buf[i-1] == '\\') { + if ((buf_grown || i > 0) && buf[i-1] == '\\') { i--; continue; } @@ -1089,7 +1089,7 @@ AP_DECLARE(apr_status_t) ap_cfg_getline(char *buf, apr_size_t bufsize, ap_configfile_t *cfp) { - apr_status_t rc = ap_cfg_getline_core(buf, bufsize, cfp); + apr_status_t rc = ap_cfg_getline_core(buf, bufsize, cfp, 0); if (rc == APR_SUCCESS) cfg_trim_line(buf); return rc; @@ -1116,7 +1116,8 @@ } for (;;) { - rc = ap_cfg_getline_core(vb->buf + vb->strlen, vb->avail - vb->strlen, cfp); + rc = ap_cfg_getline_core(vb->buf + vb->strlen, vb->avail - vb->strlen, + cfp, vb->strlen > 0); if (rc == APR_ENOSPC || rc == APR_SUCCESS) vb->strlen += strlen(vb->buf + vb->strlen); if (rc != APR_ENOSPC)