QCBOREncode_Finish sets internal error state (#218)
Addresses #217
This makes it so GetErrorState() called *after* Finish() behaves as expected. It will return the error detected in Finish().
* QCBOREncode_Finish sets internal error state
* More testing
---------
Co-authored-by: Laurence Lundblade <lgl@securitytheory.com>
diff --git a/test/qcbor_encode_tests.c b/test/qcbor_encode_tests.c
index 267b439..10e4a40 100644
--- a/test/qcbor_encode_tests.c
+++ b/test/qcbor_encode_tests.c
@@ -2483,6 +2483,8 @@
{
QCBOREncodeContext EC;
QCBORError uErr;
+ UsefulBufC EncodedResult;
+ MakeUsefulBufOnStack(SmallBuffer, 4);
// ------ Test for QCBOR_ERR_BUFFER_TOO_LARGE ------
@@ -2678,6 +2680,31 @@
}
#endif /* QCBOR_DISABLE_ENCODE_USAGE_GUARDS */
+ /* Test that still-open error sticks */
+ QCBOREncode_Init(&EC, Large);
+ QCBOREncode_OpenArray(&EC);
+ QCBOREncode_Finish(&EC, &EncodedResult);
+#ifndef QCBOR_DISABLE_ENCODE_USAGE_GUARDS
+ if(QCBOREncode_GetErrorState(&EC) != QCBOR_ERR_ARRAY_OR_MAP_STILL_OPEN) {
+ return -120;
+ }
+#else /* QCBOR_DISABLE_ENCODE_USAGE_GUARDS */
+ if(QCBOREncode_GetErrorState(&EC) != QCBOR_SUCCESS) {
+ return -122;
+ }
+#endif /* QCBOR_DISABLE_ENCODE_USAGE_GUARDS */
+
+ /* Test that too-small error is sticky */
+ QCBOREncode_Init(&EC, SmallBuffer);
+ QCBOREncode_OpenArray(&EC);
+ QCBOREncode_AddInt64(&EC, INT64_MAX);
+ QCBOREncode_AddInt64(&EC, INT64_MAX);
+ QCBOREncode_AddInt64(&EC, INT64_MAX);
+ QCBOREncode_CloseArray(&EC);
+ QCBOREncode_Finish(&EC, &EncodedResult);
+ if(QCBOREncode_GetErrorState(&EC) != QCBOR_ERR_BUFFER_TOO_SMALL) {
+ return -130;
+ }
return 0;
}