--- /dev/null
+ o Minor bugfixes (code correctness):
+ - Update to the latest version of Trunnel, which tries harder
+ to avoid generating code that can invoke memcpy(p,NULL,0).
+ Bug found by clang address sanitizer. Fixes bug 18373. Bugfix
+ on 0.2.7.2-alpha.
-/* trunnel-impl.h -- copied from Trunnel v1.4.3
+/* trunnel-impl.h -- copied from Trunnel v1.4.4
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
-/* trunnel.c -- copied from Trunnel v1.4.3
+/* trunnel.c -- copied from Trunnel v1.4.4
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
-/* trunnel.h -- copied from Trunnel v1.4.3
+/* trunnel.h -- copied from Trunnel v1.4.4
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
-/* ed25519_cert.c -- generated by Trunnel v1.4.3.
+/* ed25519_cert.c -- generated by Trunnel v1.4.4.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
trunnel_assert(written <= avail);
if (avail - written < elt_len)
goto truncated;
- memcpy(ptr, obj->un_unparsed.elts_, elt_len);
+ if (elt_len)
+ memcpy(ptr, obj->un_unparsed.elts_, elt_len);
written += elt_len; ptr += elt_len;
}
break;
/* Parse u8 un_unparsed[] */
TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->un_unparsed, remaining, {});
obj->un_unparsed.n_ = remaining;
- memcpy(obj->un_unparsed.elts_, ptr, remaining);
+ if (remaining)
+ memcpy(obj->un_unparsed.elts_, ptr, remaining);
ptr += remaining; remaining -= remaining;
break;
}
-/* ed25519_cert.h -- generated by by Trunnel v1.4.3.
+/* ed25519_cert.h -- generated by by Trunnel v1.4.4.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
-/* link_handshake.c -- generated by Trunnel v1.4.3.
+/* link_handshake.c -- generated by Trunnel v1.4.4.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
trunnel_assert(written <= avail);
if (avail - written < elt_len)
goto truncated;
- memcpy(ptr, obj->body.elts_, elt_len);
+ if (elt_len)
+ memcpy(ptr, obj->body.elts_, elt_len);
written += elt_len; ptr += elt_len;
}
CHECK_REMAINING(obj->cert_len, truncated);
TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->body, obj->cert_len, {});
obj->body.n_ = obj->cert_len;
- memcpy(obj->body.elts_, ptr, obj->cert_len);
+ if (obj->cert_len)
+ memcpy(obj->body.elts_, ptr, obj->cert_len);
ptr += obj->cert_len; remaining -= obj->cert_len;
trunnel_assert(ptr + remaining == input + len_in);
return len_in - remaining;
trunnel_assert(written <= avail);
if (avail - written < elt_len)
goto truncated;
- memcpy(ptr, obj->sig.elts_, elt_len);
+ if (elt_len)
+ memcpy(ptr, obj->sig.elts_, elt_len);
written += elt_len; ptr += elt_len;
}
CHECK_REMAINING(obj->sig_len, truncated);
TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->sig, obj->sig_len, {});
obj->sig.n_ = obj->sig_len;
- memcpy(obj->sig.elts_, ptr, obj->sig_len);
+ if (obj->sig_len)
+ memcpy(obj->sig.elts_, ptr, obj->sig_len);
ptr += obj->sig_len; remaining -= obj->sig_len;
trunnel_assert(ptr + remaining == input + len_in);
return len_in - remaining;
trunnel_assert(written <= avail);
if (avail - written < elt_len)
goto truncated;
- memcpy(ptr, obj->sig.elts_, elt_len);
+ if (elt_len)
+ memcpy(ptr, obj->sig.elts_, elt_len);
written += elt_len; ptr += elt_len;
}
/* Parse u8 sig[] */
TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->sig, remaining, {});
obj->sig.n_ = remaining;
- memcpy(obj->sig.elts_, ptr, remaining);
+ if (remaining)
+ memcpy(obj->sig.elts_, ptr, remaining);
ptr += remaining; remaining -= remaining;
trunnel_assert(ptr + remaining == input + len_in);
return len_in - remaining;
-/* link_handshake.h -- generated by by Trunnel v1.4.3.
+/* link_handshake.h -- generated by by Trunnel v1.4.4.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
-/* pwbox.c -- generated by Trunnel v1.4.3.
+/* pwbox.c -- generated by Trunnel v1.4.4.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
trunnel_assert(written <= avail);
if (avail - written < elt_len)
goto truncated;
- memcpy(ptr, obj->skey_header.elts_, elt_len);
+ if (elt_len)
+ memcpy(ptr, obj->skey_header.elts_, elt_len);
written += elt_len; ptr += elt_len;
}
trunnel_assert(written <= avail);
if (avail - written < elt_len)
goto truncated;
- memcpy(ptr, obj->data.elts_, elt_len);
+ if (elt_len)
+ memcpy(ptr, obj->data.elts_, elt_len);
written += elt_len; ptr += elt_len;
}
trunnel_assert(written <= avail);
CHECK_REMAINING(obj->header_len, truncated);
TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->skey_header, obj->header_len, {});
obj->skey_header.n_ = obj->header_len;
- memcpy(obj->skey_header.elts_, ptr, obj->header_len);
+ if (obj->header_len)
+ memcpy(obj->skey_header.elts_, ptr, obj->header_len);
ptr += obj->header_len; remaining -= obj->header_len;
/* Parse u8 iv[16] */
/* Parse u8 data[] */
TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->data, remaining, {});
obj->data.n_ = remaining;
- memcpy(obj->data.elts_, ptr, remaining);
+ if (remaining)
+ memcpy(obj->data.elts_, ptr, remaining);
ptr += remaining; remaining -= remaining;
if (remaining != 0)
goto fail;
-/* pwbox.h -- generated by by Trunnel v1.4.3.
+/* pwbox.h -- generated by by Trunnel v1.4.4.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/