Validation: add UTF-8 validation support
This implements:
- CborValidateUtf8
Signed-off-by: Thiago Macieira <thiago.macieira@intel.com>
diff --git a/src/cborvalidation.c b/src/cborvalidation.c
index 7bbf344..0f28ce9 100644
--- a/src/cborvalidation.c
+++ b/src/cborvalidation.c
@@ -31,6 +31,7 @@
#include "cbor.h"
#include "cborinternal_p.h"
#include "compilersupport_p.h"
+#include "utf8_p.h"
#include <string.h>
@@ -227,6 +228,18 @@
static CborError validate_value(CborValue *it, int flags, int recursionLeft);
+static inline CborError validate_utf8_string(const void *ptr, size_t n)
+{
+ const uint8_t *buffer = (const uint8_t *)ptr;
+ const uint8_t * const end = buffer + n;
+ while (buffer < end) {
+ uint32_t uc = get_utf8(&buffer, end);
+ if (uc == ~0U)
+ return CborErrorInvalidUtf8TextString;
+ }
+ return CborNoError;
+}
+
static inline CborError validate_simple_type(uint8_t simple_type, int flags)
{
/* At current time, all known simple types are those from RFC 7049,
@@ -421,6 +434,12 @@
return err;
if (!ptr)
break;
+
+ if (type == CborTextStringType && flags & CborValidateUtf8) {
+ err = validate_utf8_string(ptr, n);
+ if (err)
+ return err;
+ }
}
return CborNoError;