summaryrefslogtreecommitdiff
path: root/glibc-32/glibc-resolv_assert.patch
diff options
context:
space:
mode:
authorMatt Housh <jaeger@morpheus.net>2012-11-22 12:38:39 -0600
committerMatt Housh <jaeger@morpheus.net>2012-11-22 12:38:39 -0600
commit865dd54777acd5f9cf4f481291608c015528f37c (patch)
treeeca9f1b9491df8f94a31dddbd8a61b65e816040a /glibc-32/glibc-resolv_assert.patch
parenteaf06391bc35d32622cf3df0e8cc1cf606432490 (diff)
downloadcore-865dd54777acd5f9cf4f481291608c015528f37c.tar.gz
core-865dd54777acd5f9cf4f481291608c015528f37c.tar.xz
Initial consolidation for core ports for CRUX 3.0
Diffstat (limited to 'glibc-32/glibc-resolv_assert.patch')
-rw-r--r--glibc-32/glibc-resolv_assert.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/glibc-32/glibc-resolv_assert.patch b/glibc-32/glibc-resolv_assert.patch
new file mode 100644
index 00000000..f03cd160
--- /dev/null
+++ b/glibc-32/glibc-resolv_assert.patch
@@ -0,0 +1,61 @@
+# http://sourceware.org/bugzilla/show_bug.cgi?id=13013
+
+2011-07-21 Aurelien Jarno <aurel32@debian.org>
+
+ * resolv/res_query.c(__libc_res_nquery): Assign hp and hp2
+ depending n and resplen2 to catch cases where answer
+ equals answerp2.
+
+diff --git a/resolv/res_query.c b/resolv/res_query.c
+index 2f7cfaa..405fa68 100644
+--- a/resolv/res_query.c
++++ b/resolv/res_query.c
+@@ -122,6 +122,7 @@ __libc_res_nquery(res_state statp,
+ int *resplen2)
+ {
+ HEADER *hp = (HEADER *) answer;
++ HEADER *hp2;
+ int n, use_malloc = 0;
+ u_int oflags = statp->_flags;
+
+@@ -239,26 +240,25 @@ __libc_res_nquery(res_state statp,
+ /* __libc_res_nsend might have reallocated the buffer. */
+ hp = (HEADER *) *answerp;
+
+- /* We simplify the following tests by assigning HP to HP2. It
+- is easy to verify that this is the same as ignoring all
+- tests of HP2. */
+- HEADER *hp2 = answerp2 ? (HEADER *) *answerp2 : hp;
+-
+- if (n < (int) sizeof (HEADER) && answerp2 != NULL
+- && *resplen2 > (int) sizeof (HEADER))
++ /* We simplify the following tests by assigning HP to HP2 or
++ vice versa. It is easy to verify that this is the same as
++ ignoring all tests of HP or HP2. */
++ if (answerp2 == NULL || *resplen2 < (int) sizeof (HEADER))
+ {
+- /* Special case of partial answer. */
+- assert (hp != hp2);
+- hp = hp2;
++ hp2 = hp;
+ }
+- else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER)
+- && n > (int) sizeof (HEADER))
++ else
+ {
+- /* Special case of partial answer. */
+- assert (hp != hp2);
+- hp2 = hp;
++ hp2 = (HEADER *) *answerp2;
++ if (n < (int) sizeof (HEADER))
++ {
++ hp = hp2;
++ }
+ }
+
++ /* Make sure both hp and hp2 are defined */
++ assert((hp != NULL) && (hp2 != NULL));
++
+ if ((hp->rcode != NOERROR || ntohs(hp->ancount) == 0)
+ && (hp2->rcode != NOERROR || ntohs(hp2->ancount) == 0)) {
+ #ifdef DEBUG

Generated by cgit