diff --git a/extras/fixture/src/unity_fixture.c b/extras/fixture/src/unity_fixture.c
index c8275f4..b20657d 100644
--- a/extras/fixture/src/unity_fixture.c
+++ b/extras/fixture/src/unity_fixture.c
@@ -166,7 +166,7 @@ static unsigned int  heap_index;
 typedef struct GuardBytes
 {
     size_t size;
-    char guard_space[4];
+    size_t guard_space;
 } Guard;
 
 
@@ -202,6 +202,7 @@ void* unity_malloc(size_t size)
     if (guard == NULL) return NULL;
     malloc_count++;
     guard->size = size;
+    guard->guard_space = 0;
     mem = (char*)&(guard[1]);
     memcpy(&mem[size], end, sizeof(end));
 
@@ -214,7 +215,7 @@ static int isOverrun(void* mem)
     char* memAsChar = (char*)mem;
     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)
diff --git a/extras/fixture/test/Makefile b/extras/fixture/test/Makefile
index 8888d6f..8f9a324 100644
--- a/extras/fixture/test/Makefile
+++ b/extras/fixture/test/Makefile
@@ -12,24 +12,27 @@ SRC = ../src/unity_fixture.c \
       main/AllTests.c
 
 INC_DIR = -I../src -I../../../src/
-TARGET = fixture_tests.exe
+TARGET = ../build/fixture_tests.exe
 
 all: default noStdlibMalloc 32bits
 
-default:
+default: ../build/
 	$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET)
 	@ echo "default build"
 	./$(TARGET)
 
-32bits:
+32bits: ../build/
 	$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32
 	@ echo "32bits build"
 	./$(TARGET)
 
-noStdlibMalloc:
+noStdlibMalloc: ../build/
 	$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC
 	@ echo "build with noStdlibMalloc"
 	./$(TARGET)
 
 clangEverything:
 	$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m64 -Weverything # || true #prevents make from failing
+
+../build :
+	mkdir -p ../build
diff --git a/extras/fixture/test/unity_fixture_Test.c b/extras/fixture/test/unity_fixture_Test.c
index 9ca3bfd..f1df378 100644
--- a/extras/fixture/test/unity_fixture_Test.c
+++ b/extras/fixture/test/unity_fixture_Test.c
@@ -381,6 +381,47 @@ TEST(LeakDetection, BufferOverrunFoundDuringRealloc)
 #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_SETUP(InternalMalloc) { }
diff --git a/extras/fixture/test/unity_fixture_TestRunner.c b/extras/fixture/test/unity_fixture_TestRunner.c
index 4f5eefc..bc0bf5a 100644
--- a/extras/fixture/test/unity_fixture_TestRunner.c
+++ b/extras/fixture/test/unity_fixture_TestRunner.c
@@ -40,6 +40,8 @@ TEST_GROUP_RUNNER(LeakDetection)
     RUN_TEST_CASE(LeakDetection, DetectsLeak);
     RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringFree);
     RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringRealloc);
+    RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringFree);
+    RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringRealloc);
 }
 
 TEST_GROUP_RUNNER(InternalMalloc)