diff --git a/test/float_tests.c b/test/float_tests.c
index 1bff43c..1d755d5 100644
--- a/test/float_tests.c
+++ b/test/float_tests.c
@@ -567,7 +567,7 @@
     }
     
     return 0;
-};
+}
 
 
 
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index 25ab721..9bdfe79 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -69,7 +69,7 @@
       printf("%s ", szLabel);
    }
    
-   int i;
+   size_t i;
    for(i = 0; i < nLen; i++) {
       uint8_t Z = pEncoded[i];
       printf("%02x ", Z);
@@ -132,31 +132,31 @@
    if((nCBORError = QCBORDecode_GetNext(pDCtx, &Item)))
       return nCBORError;
    if(Item.uDataType != QCBOR_TYPE_INT64 || // Todo; fix this for 32-bit machines
-      Item.val.uint64 != -9223372036854775807LL - 1)
+      Item.val.int64 != -9223372036854775807LL - 1)
       return -1;
 
    if((nCBORError = QCBORDecode_GetNext(pDCtx, &Item)))
       return nCBORError;
    if(Item.uDataType != QCBOR_TYPE_INT64 ||
-      Item.val.uint64 != -4294967297)
+      Item.val.int64 != -4294967297)
       return -1;
    
    if((nCBORError = QCBORDecode_GetNext(pDCtx, &Item)))
       return nCBORError;
    if(Item.uDataType != QCBOR_TYPE_INT64 ||
-      Item.val.uint64 != -4294967296)
+      Item.val.int64 != -4294967296)
       return -1;
    
    if((nCBORError = QCBORDecode_GetNext(pDCtx, &Item)))
       return nCBORError;
    if(Item.uDataType != QCBOR_TYPE_INT64 ||
-      Item.val.uint64 != -4294967295)
+      Item.val.int64 != -4294967295)
       return -1;
    
    if((nCBORError = QCBORDecode_GetNext(pDCtx, &Item)))
       return nCBORError;
    if(Item.uDataType != QCBOR_TYPE_INT64 ||
-      Item.val.uint64 != -4294967294)
+      Item.val.int64 != -4294967294)
       return -1;
    
    
@@ -1501,7 +1501,7 @@
       if(Item.uLabelType == QCBOR_TYPE_INT64) {
          if(Item.label.int64 != nLabel) return -1;
       } else  {
-         if(Item.label.uint64 != nLabel) return -1;
+         if(Item.label.uint64 != (uint64_t)nLabel) return -1;
       }
    }
    if(Item.uNestingLevel != uNestingLevel) return -1;
@@ -1650,6 +1650,7 @@
 static const uint8_t pIndefiniteArrayBad1[] = {0x9f}; // No closing break
 static const uint8_t pIndefiniteArrayBad2[] = {0x9f, 0x9f, 0x02, 0xff}; // Not enough closing breaks
 static const uint8_t pIndefiniteArrayBad3[] = {0x9f, 0x02, 0xff, 0xff}; // Too many closing breaks
+static const uint8_t pIndefiniteArrayBad4[] = {0x81, 0x9f}; // Unclosed indeflen inside def len
 
 
 int indefinite_length_decode_test()
@@ -1708,7 +1709,7 @@
       return -1;
    }
    
-   nResult = QCBORDecode_Finish(&DC); // TODO: find bug related to this
+   nResult = QCBORDecode_Finish(&DC);
    if(nResult != QCBOR_ERR_HIT_END) {
       return -2;
    }
@@ -1764,6 +1765,29 @@
       return -2;
    }
 
+   
+   // --- next test -----
+   IndefLen = UsefulBuf_FromByteArrayLiteral(pIndefiniteArrayBad4);
+   
+   QCBORDecode_Init(&DC, IndefLen, QCBOR_DECODE_MODE_NORMAL);
+   
+   QCBORDecode_SetMemPool(&DC, MemPool, false);
+   
+   nResult = QCBORDecode_GetNext(&DC, &Item);
+   if(nResult || Item.uDataType != QCBOR_TYPE_ARRAY) {
+      return -1;
+   }
+
+   nResult = QCBORDecode_GetNext(&DC, &Item);
+   if(nResult || Item.uDataType != QCBOR_TYPE_ARRAY) {
+      return -1;
+   }
+   
+   nResult = QCBORDecode_Finish(&DC);
+   if(nResult != QCBOR_ERR_HIT_END) {
+      return -2;
+   }
+   
     return 0;
 }
 
diff --git a/test/run_tests.c b/test/run_tests.c
index 41f2d8d..1aee18b 100644
--- a/test/run_tests.c
+++ b/test/run_tests.c
@@ -53,7 +53,7 @@
  */
 const char *NumToString(int32_t nNum, UsefulBuf StringMem)
 {
-    const uint32_t uMax = 1000000000;
+    const int32_t nMax = 1000000000;
     
     UsefulOutBuf OutBuf;
     UsefulOutBuf_Init(&OutBuf, StringMem);
@@ -62,12 +62,12 @@
         UsefulOutBuf_AppendByte(&OutBuf, '-');
         nNum = -nNum;
     }
-    if(nNum > uMax-1) {
+    if(nNum > nMax-1) {
         return "XXX";
     }
     
     bool bDidSomeOutput = false;
-    for(int n = uMax; n > 0; n/=10) {
+    for(int n = nMax; n > 0; n/=10) {
         int x = nNum/n;
         if(x || bDidSomeOutput){
             bDidSomeOutput = true;
