From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: Re: [PATCH] squid 3.4.14: latest patches, sorted options Date: Tue, 26 Apr 2016 22:19:20 +0100 Message-ID: <1461705560.10266.187.camel@ipfire.org> In-Reply-To: <1461689414-1305-1-git-send-email-matthias.fischer@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6628727036519832250==" List-Id: --===============6628727036519832250== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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. >=20 > Added latest patches from upstream. >=20 > Changed '--enable-async-io=3D8' to '--enable-async-io=3D16' because of > http://www.squid-cache.org/mail-archive/squid-users/200705/0768.html : >=20 > "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." >=20 > Signed-off-by: Matthias Fischer > --- > =C2=A0lfs/squid=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0|=C2=A0=C2=A028 ++-- > =C2=A0src/patches/squid-3.4-13233.patch | 274 > ++++++++++++++++++++++++++++++++++++++ > =C2=A0src/patches/squid-3.4-13234.patch |=C2=A0=C2=A033 +++++ > =C2=A0src/patches/squid-3.4-13235.patch |=C2=A0=C2=A097 ++++++++++++++ > =C2=A04 files changed, 420 insertions(+), 12 deletions(-) > =C2=A0create mode 100644 src/patches/squid-3.4-13233.patch > =C2=A0create mode 100644 src/patches/squid-3.4-13234.patch > =C2=A0create mode 100644 src/patches/squid-3.4-13235.patch >=20 > 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)) > =C2=A0 cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13230.patch > =C2=A0 cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.4- > 13231.patch > =C2=A0 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 > + > =C2=A0 cd $(DIR_APP) && autoreconf -vfi > =C2=A0 cd $(DIR_APP)/libltdl && autoreconf -vfi > =C2=A0 > @@ -85,11 +89,15 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > =C2=A0 --mandir=3D/usr/share/man \ > =C2=A0 --libexecdir=3D/usr/lib/squid \ > =C2=A0 --localstatedir=3D/var \ > - --disable-ipv6 \ > =C2=A0 --disable-ssl \ > - --enable-poll \ > =C2=A0 --disable-icmp \ > =C2=A0 --disable-wccp \ > + --disable-wccpv2 \ > + --disable-kqueue \ > + --disable-esi \ > + --disable-arch-native \ > + --disable-ipv6 \ > + --enable-poll \ > =C2=A0 --enable-ident-lookups \ > =C2=A0 --enable-storeio=3D"aufs,diskd,ufs" \ > =C2=A0 --enable-underscores \ > @@ -107,26 +115,22 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > =C2=A0 --enable-url-rewrite-helpers \ > =C2=A0 --enable-build-info \ > =C2=A0 --enable-eui \ > - --with-pthreads \ > - --with-dl \ > - --with-filedescriptors=3D$$(( 16384 * 64 )) \ > - --with-large-files \ > - --with-aio \ > - --enable-async-io=3D8 \ > + --enable-async-io=3D16 \ > =C2=A0 --enable-unlinkd \ > =C2=A0 --enable-internal-dns \ > =C2=A0 --enable-epoll \ > - --disable-kqueue \ > =C2=A0 --enable-select \ > =C2=A0 --enable-cache-digests \ > =C2=A0 --enable-forw-via-db \ > =C2=A0 --enable-htcp \ > =C2=A0 --enable-kill-parent-hack \ > - --disable-wccpv2 \ > =C2=A0 --enable-icap-client \ > - --disable-esi \ > =C2=A0 --enable-zph-qos \ > - --disable-arch-native > + --with-pthreads \ > + --with-dl \ > + --with-filedescriptors=3D$$(( 16384 * 64 )) \ > + --with-large-files \ > + --with-aio > =C2=A0 > =C2=A0 cd $(DIR_APP) && make $(MAKETUNING) > =C2=A0 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(a)treenet.co.nz-20160420063907-hcnf4qmcg5hbjc11 > +parent: squid3(a)treenet.co.nz-20160330141410-t6p2dhzr8ri36fap > +committer: Amos Jeffries > +branch nick: 3.4 > +timestamp: Wed 2016-04-20 18:39:07 +1200 > +message: > +=C2=A0=C2=A0cachemgr.cgi: use dynamic MemBuf for internal content generati= on > +=C2=A0=C2=A0 > +=C2=A0=C2=A0Using a fixed size buffer limits how big content lines can be.= Modern > +=C2=A0=C2=A0HTTP is fast reaching the point where such limits are problema= tic. > +=C2=A0=C2=A0Also fixes incorrect uses of snprintf() by removing them. > +------------------------------------------------------------ > +# Bazaar merge directive format 2 (Bazaar 0.90) > +# revision_id: squid3(a)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(a)treenet.co.nz-20160330141410-\ > +#=C2=A0=C2=A0=C2=A0t6p2dhzr8ri36fap > +#=C2=A0 > +# Begin patch > +=3D=3D=3D 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" > +=C2=A0 > + void cbdataRegisterWithCacheManager(void) STUB > +- > ++void *cbdataInternalAlloc(cbdata_type type, const char *, int sz) { > ++=C2=A0=C2=A0=C2=A0=C2=A0return xcalloc(1, sz); > ++} > ++void *cbdataInternalFree(void *p, const char *, int) { > ++=C2=A0=C2=A0=C2=A0=C2=A0xfree(p); > ++=C2=A0=C2=A0=C2=A0=C2=A0return 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) > + > +=3D=3D=3D 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" > +=C2=A0 > + #define STUB_API "stub_mem.cc" > +-#include "STUB.h" > ++#include "tests/STUB.h" > + #include "Mem.h" > +=C2=A0 > + void > + > +=3D=3D=3D 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 > +=C2=A0 cp $(top_srcdir)/src/tests/stub_debug.cc . > +=C2=A0 > ++MemBuf.cc: $(top_srcdir)/src/MemBuf.cc > ++ cp $(top_srcdir)/src/MemBuf.cc $@ > ++ > + time.cc: $(top_srcdir)/src/time.cc > +=C2=A0 cp $(top_srcdir)/src/time.cc . > +=C2=A0 > ++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=3D test_tools.cc > +-CLEANFILES +=3D test_tools.cc stub_debug.cc time.cc > ++CLEANFILES +=3D test_tools.cc MemBuf.cc stub_debug.cc time.cc stub_cbdata= .cc > stub_mem.cc > +=C2=A0 > + ## ##### helper-mux ##### > +=C2=A0 > +@@ -74,7 +83,10 @@ > + libexec_PROGRAMS =3D cachemgr$(CGIEXT) > +=C2=A0 > + cachemgr__CGIEXT__SOURCES =3D cachemgr.cc \ > ++ MemBuf.cc \ > ++ stub_cbdata.cc \ > +=C2=A0 stub_debug.cc \ > ++ stub_mem.cc \ > +=C2=A0 test_tools.cc \ > +=C2=A0 time.cc > +=C2=A0 > + > +=3D=3D=3D 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 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return url; > + } > +=C2=A0 > +-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) > + { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *x; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *a; > +@@ -469,15 +470,14 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *p; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *a_url; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *buf_copy; > +-=C2=A0=C2=A0=C2=A0=C2=A0static char html[2 * 1024]; > +- > +-=C2=A0=C2=A0=C2=A0=C2=A0if (strlen(buf) < 1) > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return buf; > +- > +-=C2=A0=C2=A0=C2=A0=C2=A0if (*buf !=3D ' ') > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return buf; > +- > +-=C2=A0=C2=A0=C2=A0=C2=A0buf_copy =3D x =3D xstrdup(buf); > ++ > ++=C2=A0=C2=A0=C2=A0=C2=A0const char bufLen =3D strlen(buf); > ++=C2=A0=C2=A0=C2=A0=C2=A0if (bufLen < 1 || *buf !=3D ' ') { > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.append(buf, bufLen); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return; > ++=C2=A0=C2=A0=C2=A0=C2=A0} > ++ > ++=C2=A0=C2=A0=C2=A0=C2=A0buf_copy =3D x =3D xstrndup(buf, bufLen); > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0a =3D xstrtok(&x, '\t'); > +=C2=A0 > +@@ -489,59 +489,56 @@ > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* no reason to give a url for a disabled ac= tion */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!strcmp(p, "disabled")) > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0snprintf(html, sizeof(htm= l), "
  • %s (disabled) HREF=3D\"%s\">.\n", d, a_url); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.Printf("
  • %s (disabled) HREF=3D\"%s\">.\n", d, a_url); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* disable a hidden = action (requires a password, but password is not > in squid.conf) */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!strcmp(p, "hidd= en")) > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0s= nprintf(html, sizeof(html), "
  • %s (hidden) HREF=3D\"%s\">.\n", d, a_url); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0o= ut.Printf("
  • %s (hidden) HREF=3D\"%s\">.\n", d, a_url); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* disable link if authentication is required and we have no > password */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0if (!strcmp(p, "protected") && !req->passwd) > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0snprintf(html, sizeof(html), "
  • %s > (requires authentication).\n", > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0d, menu_url(req, "authenticate"), a_url); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0out.Printf("
  • %s (requires href=3D\"%s\">authentication).\n", > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0d, menu_url(req, "authenticate"), a_url); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0else > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* highlight protected but probably available e= ntries */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!strcmp(p, "protected")) > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0snprintf(html, sizeof(html), = "
  • HREF=3D\"%s\">%s\n", > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0a_url, d); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.Printf("
  • color=3D\"#FF0000\">%s\n", > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0a_url, d); > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* public entry or unknown type of protectio= n */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0snprintf(html, sizeof(html), = "
  • HREF=3D\"%s\">%s\n", a_url, d); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.Printf("
  • %s\n", > a_url, d); > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xfree(a_url); > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xfree(buf_copy); > +- > +-=C2=A0=C2=A0=C2=A0=C2=A0return html; > + } > +=C2=A0 > +-static const char * > +-munge_other_line(const char *buf, cachemgr_request * req) > ++static void > ++munge_other_line(MemBuf &out, const char *buf, cachemgr_request *) > + { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0static const char *ttags[] =3D {"td", "th"}; > +=C2=A0 > +-=C2=A0=C2=A0=C2=A0=C2=A0static char html[4096]; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0static int table_line_num =3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0static int next_is_header =3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int is_header =3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *ttag; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *buf_copy; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *x, *p; > +-=C2=A0=C2=A0=C2=A0=C2=A0int l =3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* does it look like a table? */ > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!strchr(buf, '\t') || *buf =3D=3D '\t') { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* nope, just text */ > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0snprintf(html, sizeof(htm= l), "%s%s", > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0table_line_num ? "\n
    " : "", html_q=
    uote(buf));
    > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (table_line_num)
    > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0o=
    ut.append("\n
    ", 14);
    > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.Printf("%s", html_quo=
    te(buf));
    > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0table_line_num =3D 0;
    > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return html;
    > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return;
    > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0}
    > +=C2=A0
    > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* start html table */
    > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!table_line_num) {
    > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0l +=3D snprintf(html + l,=
     sizeof(html) - l, "
    cellpadding=3D\"2\" cellspacing=3D\"1\">\n"); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.append("
    \n", > 46); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0next_is_header =3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > +=C2=A0 > +@@ -551,7 +548,7 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ttag =3D ttags[is_header]; > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* record starts */ > +-=C2=A0=C2=A0=C2=A0=C2=A0l +=3D snprintf(html + l, sizeof(html) - l, "= "); > ++=C2=A0=C2=A0=C2=A0=C2=A0out.append("", 4); > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* substitute '\t' */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0buf_copy =3D x =3D xstrdup(buf); > +@@ -568,18 +565,17 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0++x; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > +=C2=A0 > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0l +=3D snprintf(html + l,= sizeof(html) - l, "<%s colspan=3D\"%d\" > align=3D\"%s\">%s", > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ttag, column_span, > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0is_header ? "cent= er" : is_number(cell) ? "right" : > "left", > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0html_quote(cell),= ttag); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0out.Printf("<%s colspan= =3D\"%d\" align=3D\"%s\">%s", > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ttag, column_span, > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0is_header ? "center" : is_number(ce= ll) ? "right" : > "left", > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0html_quote(cell), ttag); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xfree(buf_copy); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* record ends */ > +-=C2=A0=C2=A0=C2=A0=C2=A0snprintf(html + l, sizeof(html) - l, "\n"); > ++=C2=A0=C2=A0=C2=A0=C2=A0out.append("\n", 6); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0next_is_header =3D is_header && strstr(buf, = "\t\t"); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0++table_line_num; > +-=C2=A0=C2=A0=C2=A0=C2=A0return html; > + } > +=C2=A0 > + static const char * > +@@ -736,14 +732,18 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* yes, fall through, we do not want to loose the first line */ > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case isBody: > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* interpret [and reformat] cache response */ > +- > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0M= emBuf out; > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0o= ut.init(); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0if (parse_menu) > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0fputs(munge_menu_line(buf, req), stdout); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0munge_menu_line(out, buf, req); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0else > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0fputs(munge_other_line(buf, req), stdout); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0munge_other_line(out, buf, req); > +=C2=A0 > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0b= reak; > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0f= puts(out.buf, stdout); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0break; > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case isForward: > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* 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(a)treenet.co.nz-20160420101437-36eofkldxfku61kj > +parent: squid3(a)treenet.co.nz-20160420063907-hcnf4qmcg5hbjc11 > +committer: Amos Jeffries > +branch nick: 3.4 > +timestamp: Wed 2016-04-20 22:14:37 +1200 > +message: > +=C2=A0=C2=A0nullptr is a C++11 feature > +------------------------------------------------------------ > +# Bazaar merge directive format 2 (Bazaar 0.90) > +# revision_id: squid3(a)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(a)treenet.co.nz-20160420063907-\ > +#=C2=A0=C2=A0=C2=A0hcnf4qmcg5hbjc11 > +#=C2=A0 > +# Begin patch > +=3D=3D=3D 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) { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xfree(p); > +-=C2=A0=C2=A0=C2=A0=C2=A0return nullptr; > ++=C2=A0=C2=A0=C2=A0=C2=A0return 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(a)treenet.co.nz-20160420111514-4hpxglbn9k15l5sa > +parent: squid3(a)treenet.co.nz-20160420101437-36eofkldxfku61kj > +committer: Amos Jeffries > +branch nick: 3.4 > +timestamp: Wed 2016-04-20 23:15:14 +1200 > +message: > +=C2=A0=C2=A0Fix several ESI element construction issues > +=C2=A0=C2=A0 > +=C2=A0=C2=A0* Do not wrap active logic in assert(). > +=C2=A0=C2=A0 > +=C2=A0=C2=A0* Fix localbuf array bounds checking. > +=C2=A0=C2=A0 > +=C2=A0=C2=A0* Add Must() conditions to verify array writes will succeed > +------------------------------------------------------------ > +# Bazaar merge directive format 2 (Bazaar 0.90) > +# revision_id: squid3(a)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(a)treenet.co.nz-20160420101437-\ > +#=C2=A0=C2=A0=C2=A036eofkldxfku61kj > +#=C2=A0 > +# Begin patch > +=3D=3D=3D 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 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ESIElement::Pointer element; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int specifiedattcount =3D attrCount * 2; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *position; > +-=C2=A0=C2=A0=C2=A0=C2=A0assert (ellen < sizeof (localbuf)); /* prevent un= expected overruns. */ > ++=C2=A0=C2=A0=C2=A0=C2=A0Must(ellen < sizeof(localbuf)); /* prevent unexpe= cted overruns. */ > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(86, 5, "ESIContext::Start: element '"= << el << "' with " << > specifiedattcount << " tags"); > +=C2=A0 > +@@ -1005,15 +1005,17 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* Spit out elements= we aren't interested in */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0localbuf[0] =3D '<'; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0localbuf[1] =3D '\0'; > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert (xstrncpy (&localb= uf[1], el, sizeof(localbuf) - 2)); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xstrncpy(&localbuf[1], el= , sizeof(localbuf) - 2); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0position =3D localbu= f + strlen (localbuf); > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0for (i =3D 0; i < sp= ecifiedattcount && attr[i]; i +=3D 2) { > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0M= ust(static_cast(position - localbuf) < sizeof(localbuf) > - 1); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0*position =3D ' '; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0++position; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* TODO: handle thisNode gracefully */ > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0a= ssert (xstrncpy (position, attr[i], sizeof(localbuf) + > (position - localbuf))); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0x= strncpy(position, attr[i], sizeof(localbuf) - (position - > localbuf)); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0position +=3D strlen (position); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0M= ust(static_cast(position - localbuf) < sizeof(localbuf) > - 2); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0*position =3D '=3D'; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0++position; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0*position =3D '\"'; > +@@ -1022,18 +1024,21 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0char ch; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0while ((ch =3D *chPtr++) !=3D '\0') { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (ch =3D=3D '\"') { > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert( xstrncpy(position, "&= quot;", sizeof(localbuf) + > (position-localbuf)) ); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Must(static_cast(posi= tion - localbuf) < > sizeof(localbuf) - 6); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xstrncpy(position, """, = sizeof(localbuf) - > (position-localbuf)); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0position +=3D 6; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} else { > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Must(static_cast(posi= tion - localbuf) < > sizeof(localbuf) - 1); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*position =3D ch; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0++position; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0} > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0p= osition +=3D strlen (position); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0M= ust(static_cast(position - localbuf) < sizeof(localbuf) > - 1); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0*position =3D '\"'; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0++position; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > +=C2=A0 > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Must(static_cast(= position - localbuf) < sizeof(localbuf) - > 2); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*position =3D '>'; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0++position; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*position =3D '\0'; > +@@ -1119,11 +1124,11 @@ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0switch (ESIElement::IdentifyElement (el)) { > +=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case ESIElement::ESI_ELEMENT_NONE: > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert (ellen < sizeof (l= ocalbuf)); /* prevent unexpected overruns. > */ > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Must(ellen < sizeof(local= buf) - 3); /* prevent unexpected overruns. > */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* Add elements we a= ren't interested in */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0localbuf[0] =3D '<'; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0localbuf[1] =3D '/'; > +-=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert (xstrncpy (&localb= uf[2], el, sizeof(localbuf) - 3)); > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xstrncpy(&localbuf[2], el= , sizeof(localbuf) - 3); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0position =3D localbu= f + strlen (localbuf); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*position =3D '>'; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0++position; > + --===============6628727036519832250== Content-Type: application/pgp-signature Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="signature.asc" MIME-Version: 1.0 LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KVmVyc2lvbjogR251UEcgdjIKCmlRSWNCQUFC Q2dBR0JRSlhIOXRZQUFvSkVJQjU4UDl2a0FrSDdXNFFBSWczZXpnb1pQNXhoWVhvb21adE1BRngK VHJYRmorajZFQnExRDNJVVp3QlpubUgrbUpaYXQ0WjYyWWVNZ3grZCsvZ0dieXBhV292aktpUW83 ZnptM1dDSAo0aHM4aGlWTjFGZFlIQ3hLeFBpSTk1NWdlcVlBNS9wZFFNMVMzdTFBbmQ3OEY0YkU0 Z2J1WGVqS2xvTlJlY0VWCkhSTWdBQjVVaS93UzIzOXd4SlhKSHd6YmQ0Y3lSYVhyd2NxQTVnZ2cx dGF4T1RLTzluTHBWcHdFZmFhSFE3SmwKMThsSzJ2WHdlVFAwQmRzZE8wbG5CWnhNTkxzdHptWFU4 dHRJQUdLclFWcDdDaU5HeEV6aVRjKzA1NVM0VlBJMwprU3o0UmZQbnlFdDRSaGcrS2w5RzAvMUxo dnd3L0VsNE5tMXY2UmxIaUJ0MzdSUFdra3ZTRHk1emZ1OWhuVHIrCnJWMVgyOE1hbmZPUU96aG9W Y3pOSUloVFJ3cGJlS1hQTlJ4NkpvRzJEZVpwNXRFK1grK2p3L2xtREtQZEJRQ00KUXJ6Wk9GdlFj aEdydm9maFdpL2dHYlc0UmMrNUJHS2QwSUZRU080V2VjYkFYeWwrRmd2c0NCZXhpbURJVno5cgpY akJqNVZ6WXQ1L3hvTmk5VzFmNWlsNEpFSWRwclNkNlo0VS91Q3hlekRnQU81eEhQeDYySW1vbWxY NXJZNjhDCkJYK1FiYkdHaUFaLzdzMmhJSUlDV0h3RTM3RHBudVlpSnhDSVFVL0JESEkxT2YvYkxs ellWM0wzVkxuc2g5TC8KbU96VUhqdlQxNmxlSkQycURRcE1QbWRWUTUzU205WWhoV0RQd21TS0hS ZVBUV1ZuV2MvYkNIZDJmQTNTVEVtVwo3UzBoQ2dDbXFsTEJKUHlBNm5oeQo9NDdHNgotLS0tLUVO RCBQR1AgU0lHTkFUVVJFLS0tLS0K --===============6628727036519832250==--