all: add support for a basic "make test"
This commit is contained in:
+1
-1
@@ -1223,7 +1223,7 @@ int upx_main(int argc, char *argv[]) {
|
||||
|
||||
if (gitrev[0]) {
|
||||
bool warn = true;
|
||||
const char *ee = getenv("UPX_DISABLE_GITREV_WARNING");
|
||||
const char *ee = getenv("UPX_DEBUG_DISABLE_GITREV_WARNING");
|
||||
if (ee && ee[0] && strcmp(ee, "1") == 0)
|
||||
warn = false;
|
||||
if (warn) {
|
||||
|
||||
+1
-1
@@ -413,7 +413,7 @@ void PackWcle::preprocessFixups()
|
||||
set_le32(fix,0xFFFFFFFFUL);
|
||||
fix += 4;
|
||||
|
||||
sofixups = ptr_udiff(fix, ifixups);
|
||||
sofixups = ptr_udiff_bytes(fix, ifixups);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+7
-7
@@ -1061,7 +1061,7 @@ unsigned PeFile::processImports0(ord_mask_t ord_mask) // pass 1
|
||||
|
||||
unsigned esize = ptr_diff_bytes(tarr, idlls[ic]->lookupt);
|
||||
lookups.add(idlls[ic]->lookupt,esize);
|
||||
if (ptr_diff(ibuf.subref("bad import name %#x", idlls[ic]->iat, 1), (char *)idlls[ic]->lookupt))
|
||||
if (ptr_diff_bytes(ibuf.subref("bad import name %#x", idlls[ic]->iat, 1), (char *)idlls[ic]->lookupt) != 0)
|
||||
{
|
||||
memcpy(ibuf.subref("bad import name %#x", idlls[ic]->iat, esize), idlls[ic]->lookupt, esize);
|
||||
iats.add(idlls[ic]->iat,esize);
|
||||
@@ -1215,18 +1215,18 @@ void PeFile::Export::build(char *newbase, unsigned newoffs)
|
||||
char * const enamep = ordinalp + 2 * edir.names;
|
||||
char * exports = enamep + strlen(ename) + 1;
|
||||
|
||||
edir.addrtable = newoffs + ptr_diff(functionp, newbase);
|
||||
edir.ordinaltable = newoffs + ptr_diff(ordinalp, newbase);
|
||||
edir.addrtable = newoffs + ptr_diff_bytes(functionp, newbase);
|
||||
edir.ordinaltable = newoffs + ptr_diff_bytes(ordinalp, newbase);
|
||||
memcpy(ordinalp,ordinals,2 * edir.names);
|
||||
|
||||
edir.name = newoffs + ptr_diff(enamep, newbase);
|
||||
edir.name = newoffs + ptr_diff_bytes(enamep, newbase);
|
||||
strcpy(enamep,ename);
|
||||
edir.nameptrtable = newoffs + ptr_diff(namep, newbase);
|
||||
edir.nameptrtable = newoffs + ptr_diff_bytes(namep, newbase);
|
||||
unsigned ic;
|
||||
for (ic = 0; ic < edir.names; ic++)
|
||||
{
|
||||
strcpy(exports,names[ic]);
|
||||
set_le32(namep + 4 * ic,newoffs + ptr_diff(exports, newbase));
|
||||
set_le32(namep + 4 * ic,newoffs + ptr_diff_bytes(exports, newbase));
|
||||
exports += strlen(exports) + 1;
|
||||
}
|
||||
|
||||
@@ -1235,7 +1235,7 @@ void PeFile::Export::build(char *newbase, unsigned newoffs)
|
||||
if (names[edir.names + ic])
|
||||
{
|
||||
strcpy(exports,names[edir.names + ic]);
|
||||
set_le32(functionp + 4 * ic,newoffs + ptr_diff(exports, newbase));
|
||||
set_le32(functionp + 4 * ic,newoffs + ptr_diff_bytes(exports, newbase));
|
||||
exports += strlen(exports) + 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,10 +36,13 @@ bool upx_doctest_check(int argc, char **argv) {
|
||||
UNUSED(argc);
|
||||
UNUSED(argv);
|
||||
#else
|
||||
const char *e = getenv("UPX_DEBUG_DOCTEST_DISABLE");
|
||||
if (e && e[0] && strcmp(e, "0") != 0)
|
||||
return true;
|
||||
bool minimal = true; // only show failing tests
|
||||
bool duration = false; // show timings
|
||||
bool success = false; // show all tests
|
||||
const char *e = getenv("UPX_DEBUG_DOCTEST_VERBOSE");
|
||||
e = getenv("UPX_DEBUG_DOCTEST_VERBOSE");
|
||||
if (e && e[0] && strcmp(e, "0") != 0) {
|
||||
minimal = false;
|
||||
if (strcmp(e, "2") == 0)
|
||||
|
||||
+13
-5
@@ -35,19 +35,27 @@ unsigned long long span_check_stats_check_range = 0;
|
||||
__acc_noinline void span_fail_nullptr() {
|
||||
throwCantUnpack("span unexpected NULL pointer; take care!");
|
||||
}
|
||||
|
||||
__acc_noinline void span_fail_not_same_base() {
|
||||
throwInternalError("span unexpected base pointer; take care!");
|
||||
}
|
||||
__acc_noinline void span_fail_range_nullptr() {
|
||||
throwCantUnpack("span_check_range: unexpected NULL pointer; take care!");
|
||||
}
|
||||
__acc_noinline void span_fail_range_nullbase() {
|
||||
throwCantUnpack("span_check_range: unexpected NULL base; take care!");
|
||||
}
|
||||
__acc_noinline void span_fail_range_range() {
|
||||
throwCantUnpack("span_check_range: pointer out of range; take care!");
|
||||
}
|
||||
|
||||
__acc_noinline void span_check_range(const void *p, const void *base, ptrdiff_t size_in_bytes) {
|
||||
void span_check_range(const void *p, const void *base, ptrdiff_t size_in_bytes) {
|
||||
if __acc_very_unlikely (p == nullptr)
|
||||
throwCantUnpack("span_check_range: unexpected NULL pointer; take care!");
|
||||
span_fail_range_nullptr();
|
||||
if __acc_very_unlikely (base == nullptr)
|
||||
throwCantUnpack("span_check_range: unexpected NULL base; take care!");
|
||||
span_fail_range_nullbase();
|
||||
ptrdiff_t off = (const char *) p - (const char *) base;
|
||||
if __acc_very_unlikely (off < 0 || off > size_in_bytes)
|
||||
throwCantUnpack("span_check_range: pointer out of range; take care!");
|
||||
span_fail_range_range();
|
||||
span_check_stats_check_range += 1;
|
||||
// fprintf(stderr, "span_check_range done\n");
|
||||
}
|
||||
|
||||
@@ -43,7 +43,10 @@ SPAN_NAMESPACE_BEGIN
|
||||
|
||||
__acc_noinline void span_fail_nullptr();
|
||||
__acc_noinline void span_fail_not_same_base();
|
||||
__acc_noinline void span_check_range(const void *p, const void *base, ptrdiff_t size_in_bytes);
|
||||
__acc_noinline void span_fail_range_nullptr();
|
||||
__acc_noinline void span_fail_range_nullbase();
|
||||
__acc_noinline void span_fail_range_range();
|
||||
void span_check_range(const void *p, const void *base, ptrdiff_t size_in_bytes);
|
||||
|
||||
// help constructor to distinguish between number of elements and bytes
|
||||
struct SpanCount {
|
||||
|
||||
Reference in New Issue
Block a user