mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-10 02:55:55 +02:00
squid 3.4.14: latest patches, sorted options
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> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
committed by
Michael Tremer
parent
916cf307b1
commit
198c39265b
28
lfs/squid
28
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
|
||||
|
||||
274
src/patches/squid-3.4-13233.patch
Normal file
274
src/patches/squid-3.4-13233.patch
Normal file
@@ -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 */
|
||||
|
||||
33
src/patches/squid-3.4-13234.patch
Normal file
33
src/patches/squid-3.4-13234.patch
Normal file
@@ -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)
|
||||
|
||||
97
src/patches/squid-3.4-13235.patch
Normal file
97
src/patches/squid-3.4-13235.patch
Normal file
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user