diff --git a/test/qcbor_decode_malloc_tests.c b/test/qcbor_decode_malloc_tests.c
new file mode 100644
index 0000000..91fff98
--- /dev/null
+++ b/test/qcbor_decode_malloc_tests.c
@@ -0,0 +1,103 @@
+//
+//  qcbor_decode_malloc_tests.c
+//  QCBOR
+//
+//  Created by Laurence Lundblade on 10/18/18.
+//  Copyright © 2018 Laurence Lundblade. All rights reserved.
+//
+
+#include "qcbor_decode_malloc_tests.h"
+#include "qcbor.h"
+#include <stdlib.h>
+
+
+/*
+ {"first integer": 42,
+ "an array of two strings": ["string1", "string2"],
+ "map in a map": {
+ "bytes 1": h'78787878',
+ "bytes 2": h'79797979',
+ "another int": 98, "text 2":
+ "lies, damn lies and statistics"}
+ }
+ */
+
+static uint8_t pValidMapEncoded[] = {
+    0xa3, 0x6d, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x18, 0x2a,
+    0x77, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x77, 0x6f, 0x20,
+    0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x82, 0x67, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x31, 0x67,
+    0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x32, 0x6c, 0x6d, 0x61, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20,
+    0x6d, 0x61, 0x70, 0xa4, 0x67, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x31, 0x44, 0x78, 0x78, 0x78, 0x78,
+    0x67, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x32, 0x44, 0x79, 0x79, 0x79, 0x79, 0x6b, 0x61, 0x6e, 0x6f,
+    0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x18, 0x62, 0x66, 0x74, 0x65, 0x78, 0x74, 0x20, 0x32,
+    0x78, 0x1e, 0x6c, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x64, 0x61, 0x6d, 0x6e, 0x20, 0x6c, 0x69, 0x65, 0x73,
+    0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73 } ;
+
+
+#define UNCONST_POINTER(ptr)    ((void *)(ptr))
+
+
+int MallocAllStringsTest()
+{
+    QCBORDecodeContext DC;
+    
+    // Next parse, save pointers to a few strings, destroy original and see all is OK.
+    MakeUsefulBufOnStack(CopyOfStorage, 160);
+    UsefulBufC CopyOf = UsefulBuf_Copy(CopyOfStorage, UsefulBuf_FromByteArrayLiteral(pValidMapEncoded));
+    
+    QCBORDecode_Init(&DC, CopyOf, QCBOR_DECODE_MODE_NORMAL);
+    QCBORStringAllocator *pAlloc = QCBORDecode_MakeMallocStringAllocator();
+    QCBORDecode_SetUpAllocator(&DC, pAlloc, true);
+
+
+    int nCBORError;
+    QCBORItem Item1, Item2, Item3, Item4;
+    if((nCBORError = QCBORDecode_GetNext(&DC, &Item1)))
+        return nCBORError;
+    if(Item1.uDataType != QCBOR_TYPE_MAP ||
+       Item1.val.uCount != 3)
+        return -1;
+    if((nCBORError = QCBORDecode_GetNext(&DC, &Item1)))
+        return nCBORError;
+    if((nCBORError = QCBORDecode_GetNext(&DC, &Item2)))
+        return nCBORError;
+    if((nCBORError = QCBORDecode_GetNext(&DC, &Item3)))
+        return nCBORError;
+    if((nCBORError = QCBORDecode_GetNext(&DC, &Item4)))
+        return nCBORError;
+    
+    UsefulBuf_Set(&CopyOfStorage, '_');
+    
+    if(Item1.uLabelType != QCBOR_TYPE_TEXT_STRING ||
+       Item1.label.string.len != 13 ||
+       Item1.uDataType != QCBOR_TYPE_INT64 ||
+       Item1.val.int64 != 42 ||
+       memcmp(Item1.label.string.ptr, "first integer", 13))
+        return -1;
+    
+    if(Item2.uLabelType != QCBOR_TYPE_TEXT_STRING ||
+       Item2.label.string.len != 23 ||
+       memcmp(Item2.label.string.ptr, "an array of two strings", 23) ||
+       Item2.uDataType != QCBOR_TYPE_ARRAY ||
+       Item2.val.uCount != 2)
+        return -1;
+    
+    if(Item3.uDataType != QCBOR_TYPE_TEXT_STRING ||
+       Item3.val.string.len != 7 ||
+       memcmp(Item3.val.string.ptr, "string1", 7))
+        return -1;
+    
+    if(Item4.uDataType != QCBOR_TYPE_TEXT_STRING ||
+       Item4.val.string.len != 7 ||
+       memcmp(Item4.val.string.ptr, "string2", 7))
+        return -1;
+    
+    (void)QCBORDecode_Finish(&DC);
+    
+    free(UNCONST_POINTER(Item1.label.string.ptr));
+    free(UNCONST_POINTER(Item2.label.string.ptr));
+    free(UNCONST_POINTER(Item3.val.string.ptr));
+    free(UNCONST_POINTER(Item4.val.string.ptr));
+
+    return 0;
+}
diff --git a/test/qcbor_decode_malloc_tests.h b/test/qcbor_decode_malloc_tests.h
new file mode 100644
index 0000000..685421c
--- /dev/null
+++ b/test/qcbor_decode_malloc_tests.h
@@ -0,0 +1,14 @@
+//
+//  qcbor_decode_malloc_tests.h
+//  QCBOR
+//
+//  Created by Laurence Lundblade on 10/18/18.
+//  Copyright © 2018 Laurence Lundblade. All rights reserved.
+//
+
+#ifndef qcbor_decode_malloc_tests_h
+#define qcbor_decode_malloc_tests_h
+
+int MallocAllStringsTest(void);
+
+#endif /* qcbor_decode_malloc_tests_h */
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index fce478d..bf48aa7 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -2257,9 +2257,6 @@
         return -1;
     }
     
-    
-    
-    
     return 0;
 }
 
diff --git a/test/qcbor_encode_tests.c b/test/qcbor_encode_tests.c
index 3636ba4..8612341 100644
--- a/test/qcbor_encode_tests.c
+++ b/test/qcbor_encode_tests.c
@@ -775,7 +775,7 @@
    if(CheckResults(Enc, pExpectedEncodedInts))
      return -1;
    
-   if(Enc.len != sizeof(pExpectedEncodedInts) || bcmp(pEncoded, pExpectedEncodedInts, Enc.len))
+   if(Enc.len != sizeof(pExpectedEncodedInts) || memcmp(pEncoded, pExpectedEncodedInts, Enc.len))
       nReturn = -1;
    
    //printencoded(pEncoded, nEncodedLen);
@@ -817,7 +817,7 @@
       nReturn = -1;
    }
    
-   if(ECBOR.len != sizeof(pExpectedEncodedSimple) || bcmp(pEncoded, pExpectedEncodedSimple, ECBOR.len))
+   if(ECBOR.len != sizeof(pExpectedEncodedSimple) || memcmp(pEncoded, pExpectedEncodedSimple, ECBOR.len))
       nReturn = -1;
    
    // printencoded(pEncoded, nEncodedLen);
@@ -874,7 +874,7 @@
       nReturn = -1;
    }
    
-   if(nEncodedLen != sizeof(pExpectedEncodedDates) || bcmp(pEncoded, pExpectedEncodedDates, nEncodedLen))
+   if(nEncodedLen != sizeof(pExpectedEncodedDates) || memcmp(pEncoded, pExpectedEncodedDates, nEncodedLen))
       nReturn = -1;
    
    //printencoded(pEncoded, nEncodedLen);
diff --git a/test/run_tests.c b/test/run_tests.c
index 8a63d78..41c70e0 100644
--- a/test/run_tests.c
+++ b/test/run_tests.c
@@ -37,6 +37,7 @@
 #include "qcbor_decode_tests.h"
 #include "qcbor_encode_tests.h"
 #include "UsefulBuf_Tests.h"
+#include "qcbor_decode_malloc_tests.h"
 
 // Used to test the test runner
 int fail_test()
@@ -112,6 +113,7 @@
 
 
 test_entry s_tests[] = {
+    TEST_ENTRY(MallocAllStringsTest),
     TEST_ENTRY(AllocAllStringsTest),
     TEST_ENTRY(IndefiniteLengthNestTest),
     TEST_ENTRY(NestedMapTestIndefLen),
