mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2025-06-26 03:17:59 +08:00
Merge pull request #163 from jsalling/feature/move-makefile-output
Move Makefile output to build/ directory in Fixture (Thanks jsalling!)
This commit is contained in:
@ -166,7 +166,7 @@ static unsigned int heap_index;
|
|||||||
typedef struct GuardBytes
|
typedef struct GuardBytes
|
||||||
{
|
{
|
||||||
size_t size;
|
size_t size;
|
||||||
char guard_space[4];
|
size_t guard_space;
|
||||||
} Guard;
|
} Guard;
|
||||||
|
|
||||||
|
|
||||||
@ -202,6 +202,7 @@ void* unity_malloc(size_t size)
|
|||||||
if (guard == NULL) return NULL;
|
if (guard == NULL) return NULL;
|
||||||
malloc_count++;
|
malloc_count++;
|
||||||
guard->size = size;
|
guard->size = size;
|
||||||
|
guard->guard_space = 0;
|
||||||
mem = (char*)&(guard[1]);
|
mem = (char*)&(guard[1]);
|
||||||
memcpy(&mem[size], end, sizeof(end));
|
memcpy(&mem[size], end, sizeof(end));
|
||||||
|
|
||||||
@ -214,7 +215,7 @@ static int isOverrun(void* mem)
|
|||||||
char* memAsChar = (char*)mem;
|
char* memAsChar = (char*)mem;
|
||||||
guard--;
|
guard--;
|
||||||
|
|
||||||
return strcmp(&memAsChar[guard->size], end) != 0;
|
return guard->guard_space != 0 || strcmp(&memAsChar[guard->size], end) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void release_memory(void* mem)
|
static void release_memory(void* mem)
|
||||||
|
@ -12,24 +12,27 @@ SRC = ../src/unity_fixture.c \
|
|||||||
main/AllTests.c
|
main/AllTests.c
|
||||||
|
|
||||||
INC_DIR = -I../src -I../../../src/
|
INC_DIR = -I../src -I../../../src/
|
||||||
TARGET = fixture_tests.exe
|
TARGET = ../build/fixture_tests.exe
|
||||||
|
|
||||||
all: default noStdlibMalloc 32bits
|
all: default noStdlibMalloc 32bits
|
||||||
|
|
||||||
default:
|
default: ../build/
|
||||||
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET)
|
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET)
|
||||||
@ echo "default build"
|
@ echo "default build"
|
||||||
./$(TARGET)
|
./$(TARGET)
|
||||||
|
|
||||||
32bits:
|
32bits: ../build/
|
||||||
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32
|
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32
|
||||||
@ echo "32bits build"
|
@ echo "32bits build"
|
||||||
./$(TARGET)
|
./$(TARGET)
|
||||||
|
|
||||||
noStdlibMalloc:
|
noStdlibMalloc: ../build/
|
||||||
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC
|
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC
|
||||||
@ echo "build with noStdlibMalloc"
|
@ echo "build with noStdlibMalloc"
|
||||||
./$(TARGET)
|
./$(TARGET)
|
||||||
|
|
||||||
clangEverything:
|
clangEverything:
|
||||||
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m64 -Weverything # || true #prevents make from failing
|
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m64 -Weverything # || true #prevents make from failing
|
||||||
|
|
||||||
|
../build :
|
||||||
|
mkdir -p ../build
|
||||||
|
@ -381,6 +381,47 @@ TEST(LeakDetection, BufferOverrunFoundDuringRealloc)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(LeakDetection, BufferGuardWriteFoundDuringFree)
|
||||||
|
{
|
||||||
|
#ifndef USING_OUTPUT_SPY
|
||||||
|
UNITY_PRINT_EOL();
|
||||||
|
TEST_IGNORE();
|
||||||
|
#else
|
||||||
|
void* m = malloc(10);
|
||||||
|
TEST_ASSERT_NOT_NULL(m);
|
||||||
|
char* s = (char*)m;
|
||||||
|
s[-1] = (char)0x00; // Will not detect 0
|
||||||
|
s[-2] = (char)0x01;
|
||||||
|
UnityOutputCharSpy_Enable(1);
|
||||||
|
EXPECT_ABORT_BEGIN
|
||||||
|
free(m);
|
||||||
|
EXPECT_ABORT_END
|
||||||
|
UnityOutputCharSpy_Enable(0);
|
||||||
|
Unity.CurrentTestFailed = 0;
|
||||||
|
CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(LeakDetection, BufferGuardWriteFoundDuringRealloc)
|
||||||
|
{
|
||||||
|
#ifndef USING_OUTPUT_SPY
|
||||||
|
UNITY_PRINT_EOL();
|
||||||
|
TEST_IGNORE();
|
||||||
|
#else
|
||||||
|
void* m = malloc(10);
|
||||||
|
TEST_ASSERT_NOT_NULL(m);
|
||||||
|
char* s = (char*)m;
|
||||||
|
s[-1] = (char)0x0A;
|
||||||
|
UnityOutputCharSpy_Enable(1);
|
||||||
|
EXPECT_ABORT_BEGIN
|
||||||
|
m = realloc(m, 100);
|
||||||
|
EXPECT_ABORT_END
|
||||||
|
UnityOutputCharSpy_Enable(0);
|
||||||
|
Unity.CurrentTestFailed = 0;
|
||||||
|
CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
TEST_GROUP(InternalMalloc);
|
TEST_GROUP(InternalMalloc);
|
||||||
|
|
||||||
TEST_SETUP(InternalMalloc) { }
|
TEST_SETUP(InternalMalloc) { }
|
||||||
|
@ -40,6 +40,8 @@ TEST_GROUP_RUNNER(LeakDetection)
|
|||||||
RUN_TEST_CASE(LeakDetection, DetectsLeak);
|
RUN_TEST_CASE(LeakDetection, DetectsLeak);
|
||||||
RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringFree);
|
RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringFree);
|
||||||
RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringRealloc);
|
RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringRealloc);
|
||||||
|
RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringFree);
|
||||||
|
RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringRealloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_GROUP_RUNNER(InternalMalloc)
|
TEST_GROUP_RUNNER(InternalMalloc)
|
||||||
|
Reference in New Issue
Block a user