squid 3.4.14: latest patches, sorted options
Message ID | 1461689414-1305-1-git-send-email-matthias.fischer@ipfire.org |
---|---|
State | Accepted |
Commit | 198c39265bc110bb2130cbfd3c81d968dbcad5c8 |
Headers |
Return-Path: <development-bounces@lists.ipfire.org> Received: from mail01.ipfire.org (hedwig.ipfire.org [172.28.1.200]) by web02.ipfire.org (Postfix) with ESMTP id 0049B62864 for <patchwork@ipfire.org>; Tue, 26 Apr 2016 18:50:23 +0200 (CEST) Received: from mail01.ipfire.org (localhost [IPv6:::1]) by mail01.ipfire.org (Postfix) with ESMTP id 02B07C72; Tue, 26 Apr 2016 18:50:23 +0200 (CEST) Received: from Devel.localdomain (p5DD82A3B.dip0.t-ipconnect.de [93.216.42.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 15CB6A5C for <development@lists.ipfire.org>; Tue, 26 Apr 2016 18:50:19 +0200 (CEST) From: Matthias Fischer <matthias.fischer@ipfire.org> To: development@lists.ipfire.org Subject: [PATCH] squid 3.4.14: latest patches, sorted options Date: Tue, 26 Apr 2016 18:50:14 +0200 Message-Id: <1461689414-1305-1-git-send-email-matthias.fischer@ipfire.org> X-Mailer: git-send-email 2.8.1 X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: IPFire development talk <development.lists.ipfire.org> List-Unsubscribe: <http://lists.ipfire.org/mailman/options/development>, <mailto:development-request@lists.ipfire.org?subject=unsubscribe> List-Archive: <http://lists.ipfire.org/pipermail/development/> List-Post: <mailto:development@lists.ipfire.org> List-Help: <mailto:development-request@lists.ipfire.org?subject=help> List-Subscribe: <http://lists.ipfire.org/mailman/listinfo/development>, <mailto:development-request@lists.ipfire.org?subject=subscribe> Errors-To: development-bounces@lists.ipfire.org Sender: "Development" <development-bounces@lists.ipfire.org> |
Message
Matthias Fischer
April 27, 2016, 2:50 a.m. UTC
The 'configure'-options were sorted (kind of) to get a better overview.
Added latest patches from upstream.
Changed '--enable-async-io=8' to '--enable-async-io=16' because of
http://www.squid-cache.org/mail-archive/squid-users/200705/0768.html :
"The default number of threads is dependent on the number of aufs
cache_dir lines, based on a reasonable estimate of how the code behaves."
Signed-off-by: Matthias Fischer <matthias.fischer@ipfire.org>
---
lfs/squid | 28 ++--
src/patches/squid-3.4-13233.patch | 274 ++++++++++++++++++++++++++++++++++++++
src/patches/squid-3.4-13234.patch | 33 +++++
src/patches/squid-3.4-13235.patch | 97 ++++++++++++++
4 files changed, 420 insertions(+), 12 deletions(-)
create mode 100644 src/patches/squid-3.4-13233.patch
create mode 100644 src/patches/squid-3.4-13234.patch
create mode 100644 src/patches/squid-3.4-13235.patch
Comments
Hi, I will merge this this time, but please do these things in several commits in the future. Best, -Michael On Tue, 2016-04-26 at 18:50 +0200, Matthias Fischer wrote: > The 'configure'-options were sorted (kind of) to get a better overview. > > Added latest patches from upstream. > > Changed '--enable-async-io=8' to '--enable-async-io=16' because of > http://www.squid-cache.org/mail-archive/squid-users/200705/0768.html : > > "The default number of threads is dependent on the number of aufs > cache_dir lines, based on a reasonable estimate of how the code behaves." > > Signed-off-by: Matthias Fischer <matthias.fischer@ipfire.org> > --- > lfs/squid | 28 ++-- > src/patches/squid-3.4-13233.patch | 274 > ++++++++++++++++++++++++++++++++++++++ > src/patches/squid-3.4-13234.patch | 33 +++++ > src/patches/squid-3.4-13235.patch | 97 ++++++++++++++ > 4 files changed, 420 insertions(+), 12 deletions(-) > create mode 100644 src/patches/squid-3.4-13233.patch > create mode 100644 src/patches/squid-3.4-13234.patch > create mode 100644 src/patches/squid-3.4-13235.patch > > diff --git a/lfs/squid b/lfs/squid > index 7e41c16..6725a6e 100644 > --- a/lfs/squid > +++ b/lfs/squid > @@ -75,6 +75,10 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13230.patch > cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13231.patch > cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13232.patch > + cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13233.patch > + cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13234.patch > + cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13235.patch > + > cd $(DIR_APP) && autoreconf -vfi > cd $(DIR_APP)/libltdl && autoreconf -vfi > > @@ -85,11 +89,15 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > --mandir=/usr/share/man \ > --libexecdir=/usr/lib/squid \ > --localstatedir=/var \ > - --disable-ipv6 \ > --disable-ssl \ > - --enable-poll \ > --disable-icmp \ > --disable-wccp \ > + --disable-wccpv2 \ > + --disable-kqueue \ > + --disable-esi \ > + --disable-arch-native \ > + --disable-ipv6 \ > + --enable-poll \ > --enable-ident-lookups \ > --enable-storeio="aufs,diskd,ufs" \ > --enable-underscores \ > @@ -107,26 +115,22 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > --enable-url-rewrite-helpers \ > --enable-build-info \ > --enable-eui \ > - --with-pthreads \ > - --with-dl \ > - --with-filedescriptors=$$(( 16384 * 64 )) \ > - --with-large-files \ > - --with-aio \ > - --enable-async-io=8 \ > + --enable-async-io=16 \ > --enable-unlinkd \ > --enable-internal-dns \ > --enable-epoll \ > - --disable-kqueue \ > --enable-select \ > --enable-cache-digests \ > --enable-forw-via-db \ > --enable-htcp \ > --enable-kill-parent-hack \ > - --disable-wccpv2 \ > --enable-icap-client \ > - --disable-esi \ > --enable-zph-qos \ > - --disable-arch-native > + --with-pthreads \ > + --with-dl \ > + --with-filedescriptors=$$(( 16384 * 64 )) \ > + --with-large-files \ > + --with-aio > > cd $(DIR_APP) && make $(MAKETUNING) > cd $(DIR_APP) && make install > diff --git a/src/patches/squid-3.4-13233.patch b/src/patches/squid-3.4- > 13233.patch > new file mode 100644 > index 0000000..d657838 > --- /dev/null > +++ b/src/patches/squid-3.4-13233.patch > @@ -0,0 +1,274 @@ > +------------------------------------------------------------ > +revno: 13233 > +revision-id: squid3@treenet.co.nz-20160420063907-hcnf4qmcg5hbjc11 > +parent: squid3@treenet.co.nz-20160330141410-t6p2dhzr8ri36fap > +committer: Amos Jeffries <squid3@treenet.co.nz> > +branch nick: 3.4 > +timestamp: Wed 2016-04-20 18:39:07 +1200 > +message: > + cachemgr.cgi: use dynamic MemBuf for internal content generation > + > + Using a fixed size buffer limits how big content lines can be. Modern > + HTTP is fast reaching the point where such limits are problematic. > + Also fixes incorrect uses of snprintf() by removing them. > +------------------------------------------------------------ > +# Bazaar merge directive format 2 (Bazaar 0.90) > +# revision_id: squid3@treenet.co.nz-20160420063907-hcnf4qmcg5hbjc11 > +# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 > +# testament_sha1: 161e86814f6f14d74557a3fa169b37b6601c08a1 > +# timestamp: 2016-04-20 06:50:57 +0000 > +# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 > +# base_revision_id: squid3@treenet.co.nz-20160330141410-\ > +# t6p2dhzr8ri36fap > +# > +# Begin patch > +=== modified file 'src/tests/stub_cbdata.cc' > +--- src/tests/stub_cbdata.cc 2012-11-01 10:31:28 +0000 > ++++ src/tests/stub_cbdata.cc 2016-04-20 06:39:07 +0000 > +@@ -5,7 +5,13 @@ > + #include "tests/STUB.h" > + > + void cbdataRegisterWithCacheManager(void) STUB > +- > ++void *cbdataInternalAlloc(cbdata_type type, const char *, int sz) { > ++ return xcalloc(1, sz); > ++} > ++void *cbdataInternalFree(void *p, const char *, int) { > ++ xfree(p); > ++ return nullptr; > ++} > + #if USE_CBDATA_DEBUG > + void *cbdataInternalAllocDbg(cbdata_type type, const char *, int) > STUB_RETVAL(NULL) > + void *cbdataInternalFreeDbg(void *p, const char *, int) STUB_RETVAL(NULL) > + > +=== modified file 'src/tests/stub_mem.cc' > +--- src/tests/stub_mem.cc 2012-08-29 07:29:35 +0000 > ++++ src/tests/stub_mem.cc 2016-04-20 06:39:07 +0000 > +@@ -5,7 +5,7 @@ > + #include "squid.h" > + > + #define STUB_API "stub_mem.cc" > +-#include "STUB.h" > ++#include "tests/STUB.h" > + #include "Mem.h" > + > + void > + > +=== modified file 'tools/Makefile.am' > +--- tools/Makefile.am 2014-04-06 04:37:08 +0000 > ++++ tools/Makefile.am 2016-04-20 06:39:07 +0000 > +@@ -35,15 +35,24 @@ > + stub_debug.cc: $(top_srcdir)/src/tests/stub_debug.cc > + cp $(top_srcdir)/src/tests/stub_debug.cc . > + > ++MemBuf.cc: $(top_srcdir)/src/MemBuf.cc > ++ cp $(top_srcdir)/src/MemBuf.cc $@ > ++ > + time.cc: $(top_srcdir)/src/time.cc > + cp $(top_srcdir)/src/time.cc . > + > ++stub_cbdata.cc: $(top_srcdir)/src/tests/stub_cbdata.cc > ++ cp $(top_srcdir)/src/tests/stub_cbdata.cc $@ > ++ > ++stub_mem.cc: $(top_srcdir)/src/tests/stub_mem.cc > ++ cp $(top_srcdir)/src/tests/stub_mem.cc $@ > ++ > + # stock tools for unit tests - library independent versions of dlink_list > + # etc. > + # globals.cc is needed by test_tools.cc. > + # Neither of these should be disted from here. > + TESTSOURCES= test_tools.cc > +-CLEANFILES += test_tools.cc stub_debug.cc time.cc > ++CLEANFILES += test_tools.cc MemBuf.cc stub_debug.cc time.cc stub_cbdata.cc > stub_mem.cc > + > + ## ##### helper-mux ##### > + > +@@ -74,7 +83,10 @@ > + libexec_PROGRAMS = cachemgr$(CGIEXT) > + > + cachemgr__CGIEXT__SOURCES = cachemgr.cc \ > ++ MemBuf.cc \ > ++ stub_cbdata.cc \ > + stub_debug.cc \ > ++ stub_mem.cc \ > + test_tools.cc \ > + time.cc > + > + > +=== modified file 'tools/cachemgr.cc' > +--- tools/cachemgr.cc 2015-01-09 10:32:57 +0000 > ++++ tools/cachemgr.cc 2016-04-20 06:39:07 +0000 > +@@ -35,6 +35,7 @@ > + #include "getfullhostname.h" > + #include "html_quote.h" > + #include "ip/Address.h" > ++#include "MemBuf.h" > + #include "rfc1123.h" > + #include "rfc1738.h" > + #include "util.h" > +@@ -460,8 +461,8 @@ > + return url; > + } > + > +-static const char * > +-munge_menu_line(const char *buf, cachemgr_request * req) > ++static void > ++munge_menu_line(MemBuf &out, const char *buf, cachemgr_request * req) > + { > + char *x; > + const char *a; > +@@ -469,15 +470,14 @@ > + const char *p; > + char *a_url; > + char *buf_copy; > +- static char html[2 * 1024]; > +- > +- if (strlen(buf) < 1) > +- return buf; > +- > +- if (*buf != ' ') > +- return buf; > +- > +- buf_copy = x = xstrdup(buf); > ++ > ++ const char bufLen = strlen(buf); > ++ if (bufLen < 1 || *buf != ' ') { > ++ out.append(buf, bufLen); > ++ return; > ++ } > ++ > ++ buf_copy = x = xstrndup(buf, bufLen); > + > + a = xstrtok(&x, '\t'); > + > +@@ -489,59 +489,56 @@ > + > + /* no reason to give a url for a disabled action */ > + if (!strcmp(p, "disabled")) > +- snprintf(html, sizeof(html), "<LI type=\"circle\">%s (disabled)<A > HREF=\"%s\">.</A>\n", d, a_url); > ++ out.Printf("<LI type=\"circle\">%s (disabled)<A > HREF=\"%s\">.</A>\n", d, a_url); > + else > + /* disable a hidden action (requires a password, but password is not > in squid.conf) */ > + if (!strcmp(p, "hidden")) > +- snprintf(html, sizeof(html), "<LI type=\"circle\">%s (hidden)<A > HREF=\"%s\">.</A>\n", d, a_url); > ++ out.Printf("<LI type=\"circle\">%s (hidden)<A > HREF=\"%s\">.</A>\n", d, a_url); > + else > + /* disable link if authentication is required and we have no > password */ > + if (!strcmp(p, "protected") && !req->passwd) > +- snprintf(html, sizeof(html), "<LI type=\"circle\">%s > (requires <a href=\"%s\">authentication</a>)<A HREF=\"%s\">.</A>\n", > +- d, menu_url(req, "authenticate"), a_url); > ++ out.Printf("<LI type=\"circle\">%s (requires <a > href=\"%s\">authentication</a>)<A HREF=\"%s\">.</A>\n", > ++ d, menu_url(req, "authenticate"), a_url); > + else > + /* highlight protected but probably available entries */ > + if (!strcmp(p, "protected")) > +- snprintf(html, sizeof(html), "<LI type=\"square\"><A > HREF=\"%s\"><font color=\"#FF0000\">%s</font></A>\n", > +- a_url, d); > ++ out.Printf("<LI type=\"square\"><A HREF=\"%s\"><font > color=\"#FF0000\">%s</font></A>\n", > ++ a_url, d); > + > + /* public entry or unknown type of protection */ > + else > +- snprintf(html, sizeof(html), "<LI type=\"disk\"><A > HREF=\"%s\">%s</A>\n", a_url, d); > ++ out.Printf("<LI type=\"disk\"><A HREF=\"%s\">%s</A>\n", > a_url, d); > + > + xfree(a_url); > + > + xfree(buf_copy); > +- > +- return html; > + } > + > +-static const char * > +-munge_other_line(const char *buf, cachemgr_request * req) > ++static void > ++munge_other_line(MemBuf &out, const char *buf, cachemgr_request *) > + { > + static const char *ttags[] = {"td", "th"}; > + > +- static char html[4096]; > + static int table_line_num = 0; > + static int next_is_header = 0; > + int is_header = 0; > + const char *ttag; > + char *buf_copy; > + char *x, *p; > +- int l = 0; > + /* does it look like a table? */ > + > + if (!strchr(buf, '\t') || *buf == '\t') { > + /* nope, just text */ > +- snprintf(html, sizeof(html), "%s%s", > +- table_line_num ? "</table>\n<pre>" : "", html_quote(buf)); > ++ if (table_line_num) > ++ out.append("</table>\n<pre>", 14); > ++ out.Printf("%s", html_quote(buf)); > + table_line_num = 0; > +- return html; > ++ return; > + } > + > + /* start html table */ > + if (!table_line_num) { > +- l += snprintf(html + l, sizeof(html) - l, "</pre><table > cellpadding=\"2\" cellspacing=\"1\">\n"); > ++ out.append("</pre><table cellpadding=\"2\" cellspacing=\"1\">\n", > 46); > + next_is_header = 0; > + } > + > +@@ -551,7 +548,7 @@ > + ttag = ttags[is_header]; > + > + /* record starts */ > +- l += snprintf(html + l, sizeof(html) - l, "<tr>"); > ++ out.append("<tr>", 4); > + > + /* substitute '\t' */ > + buf_copy = x = xstrdup(buf); > +@@ -568,18 +565,17 @@ > + ++x; > + } > + > +- l += snprintf(html + l, sizeof(html) - l, "<%s colspan=\"%d\" > align=\"%s\">%s</%s>", > +- ttag, column_span, > +- is_header ? "center" : is_number(cell) ? "right" : > "left", > +- html_quote(cell), ttag); > ++ out.Printf("<%s colspan=\"%d\" align=\"%s\">%s</%s>", > ++ ttag, column_span, > ++ is_header ? "center" : is_number(cell) ? "right" : > "left", > ++ html_quote(cell), ttag); > + } > + > + xfree(buf_copy); > + /* record ends */ > +- snprintf(html + l, sizeof(html) - l, "</tr>\n"); > ++ out.append("</tr>\n", 6); > + next_is_header = is_header && strstr(buf, "\t\t"); > + ++table_line_num; > +- return html; > + } > + > + static const char * > +@@ -736,14 +732,18 @@ > + /* yes, fall through, we do not want to loose the first line */ > + > + case isBody: > ++ { > + /* interpret [and reformat] cache response */ > +- > ++ MemBuf out; > ++ out.init(); > + if (parse_menu) > +- fputs(munge_menu_line(buf, req), stdout); > ++ munge_menu_line(out, buf, req); > + else > +- fputs(munge_other_line(buf, req), stdout); > ++ munge_other_line(out, buf, req); > + > +- break; > ++ fputs(out.buf, stdout); > ++ } > ++ break; > + > + case isForward: > + /* forward: no modifications allowed */ > + > diff --git a/src/patches/squid-3.4-13234.patch b/src/patches/squid-3.4- > 13234.patch > new file mode 100644 > index 0000000..6f701fa > --- /dev/null > +++ b/src/patches/squid-3.4-13234.patch > @@ -0,0 +1,33 @@ > +------------------------------------------------------------ > +revno: 13234 > +revision-id: squid3@treenet.co.nz-20160420101437-36eofkldxfku61kj > +parent: squid3@treenet.co.nz-20160420063907-hcnf4qmcg5hbjc11 > +committer: Amos Jeffries <squid3@treenet.co.nz> > +branch nick: 3.4 > +timestamp: Wed 2016-04-20 22:14:37 +1200 > +message: > + nullptr is a C++11 feature > +------------------------------------------------------------ > +# Bazaar merge directive format 2 (Bazaar 0.90) > +# revision_id: squid3@treenet.co.nz-20160420101437-36eofkldxfku61kj > +# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 > +# testament_sha1: 0f9f2a5b29a7ef02befe2a4e2e6357ef4bcffbce > +# timestamp: 2016-04-20 10:51:03 +0000 > +# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 > +# base_revision_id: squid3@treenet.co.nz-20160420063907-\ > +# hcnf4qmcg5hbjc11 > +# > +# Begin patch > +=== modified file 'src/tests/stub_cbdata.cc' > +--- src/tests/stub_cbdata.cc 2016-04-20 06:39:07 +0000 > ++++ src/tests/stub_cbdata.cc 2016-04-20 10:14:37 +0000 > +@@ -10,7 +10,7 @@ > + } > + void *cbdataInternalFree(void *p, const char *, int) { > + xfree(p); > +- return nullptr; > ++ return NULL; > + } > + #if USE_CBDATA_DEBUG > + void *cbdataInternalAllocDbg(cbdata_type type, const char *, int) > STUB_RETVAL(NULL) > + > diff --git a/src/patches/squid-3.4-13235.patch b/src/patches/squid-3.4- > 13235.patch > new file mode 100644 > index 0000000..e380225 > --- /dev/null > +++ b/src/patches/squid-3.4-13235.patch > @@ -0,0 +1,97 @@ > +------------------------------------------------------------ > +revno: 13235 > +revision-id: squid3@treenet.co.nz-20160420111514-4hpxglbn9k15l5sa > +parent: squid3@treenet.co.nz-20160420101437-36eofkldxfku61kj > +committer: Amos Jeffries <squid3@treenet.co.nz> > +branch nick: 3.4 > +timestamp: Wed 2016-04-20 23:15:14 +1200 > +message: > + Fix several ESI element construction issues > + > + * Do not wrap active logic in assert(). > + > + * Fix localbuf array bounds checking. > + > + * Add Must() conditions to verify array writes will succeed > +------------------------------------------------------------ > +# Bazaar merge directive format 2 (Bazaar 0.90) > +# revision_id: squid3@treenet.co.nz-20160420111514-4hpxglbn9k15l5sa > +# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 > +# testament_sha1: e95687b13c98667ab09966e7f94d511ca3e6ad96 > +# timestamp: 2016-04-20 11:18:22 +0000 > +# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.4 > +# base_revision_id: squid3@treenet.co.nz-20160420101437-\ > +# 36eofkldxfku61kj > +# > +# Begin patch > +=== modified file 'src/esi/Esi.cc' > +--- src/esi/Esi.cc 2013-06-27 15:58:46 +0000 > ++++ src/esi/Esi.cc 2016-04-20 11:15:14 +0000 > +@@ -991,7 +991,7 @@ > + ESIElement::Pointer element; > + int specifiedattcount = attrCount * 2; > + char *position; > +- assert (ellen < sizeof (localbuf)); /* prevent unexpected overruns. */ > ++ Must(ellen < sizeof(localbuf)); /* prevent unexpected overruns. */ > + > + debugs(86, 5, "ESIContext::Start: element '" << el << "' with " << > specifiedattcount << " tags"); > + > +@@ -1005,15 +1005,17 @@ > + /* Spit out elements we aren't interested in */ > + localbuf[0] = '<'; > + localbuf[1] = '\0'; > +- assert (xstrncpy (&localbuf[1], el, sizeof(localbuf) - 2)); > ++ xstrncpy(&localbuf[1], el, sizeof(localbuf) - 2); > + position = localbuf + strlen (localbuf); > + > + for (i = 0; i < specifiedattcount && attr[i]; i += 2) { > ++ Must(static_cast<size_t>(position - localbuf) < sizeof(localbuf) > - 1); > + *position = ' '; > + ++position; > + /* TODO: handle thisNode gracefully */ > +- assert (xstrncpy (position, attr[i], sizeof(localbuf) + > (position - localbuf))); > ++ xstrncpy(position, attr[i], sizeof(localbuf) - (position - > localbuf)); > + position += strlen (position); > ++ Must(static_cast<size_t>(position - localbuf) < sizeof(localbuf) > - 2); > + *position = '='; > + ++position; > + *position = '\"'; > +@@ -1022,18 +1024,21 @@ > + char ch; > + while ((ch = *chPtr++) != '\0') { > + if (ch == '\"') { > +- assert( xstrncpy(position, """, sizeof(localbuf) + > (position-localbuf)) ); > ++ Must(static_cast<size_t>(position - localbuf) < > sizeof(localbuf) - 6); > ++ xstrncpy(position, """, sizeof(localbuf) - > (position-localbuf)); > + position += 6; > + } else { > ++ Must(static_cast<size_t>(position - localbuf) < > sizeof(localbuf) - 1); > + *position = ch; > + ++position; > + } > + } > +- position += strlen (position); > ++ Must(static_cast<size_t>(position - localbuf) < sizeof(localbuf) > - 1); > + *position = '\"'; > + ++position; > + } > + > ++ Must(static_cast<size_t>(position - localbuf) < sizeof(localbuf) - > 2); > + *position = '>'; > + ++position; > + *position = '\0'; > +@@ -1119,11 +1124,11 @@ > + switch (ESIElement::IdentifyElement (el)) { > + > + case ESIElement::ESI_ELEMENT_NONE: > +- assert (ellen < sizeof (localbuf)); /* prevent unexpected overruns. > */ > ++ Must(ellen < sizeof(localbuf) - 3); /* prevent unexpected overruns. > */ > + /* Add elements we aren't interested in */ > + localbuf[0] = '<'; > + localbuf[1] = '/'; > +- assert (xstrncpy (&localbuf[2], el, sizeof(localbuf) - 3)); > ++ xstrncpy(&localbuf[2], el, sizeof(localbuf) - 3); > + position = localbuf + strlen (localbuf); > + *position = '>'; > + ++position; > +