Change authorization set serialization approach to ensure that 32 vs 64
bit size and alignment differences don't cause problems.

Change-Id: I4a308cfac782161db2f1456adb2d6a56537e61f1
diff --git a/serializable.cpp b/serializable.cpp
index c00d913..ccb8d0e 100644
--- a/serializable.cpp
+++ b/serializable.cpp
@@ -18,6 +18,12 @@
 
 namespace keymaster {
 
+uint8_t* append_to_buf(uint8_t* buf, const uint8_t* end, const void* data, size_t data_len) {
+    if (buf + data_len <= end)
+        memcpy(buf, data, data_len);
+    return buf + data_len;
+}
+
 bool copy_from_buf(const uint8_t** buf, const uint8_t* end, void* dest, size_t size) {
     if (end < *buf + size)
         return false;
@@ -29,11 +35,13 @@
 bool copy_size_and_data_from_buf(const uint8_t** buf, const uint8_t* end, size_t* size,
                                  uint8_t** dest) {
     uint32_t data_len;
-    if (!copy_from_buf(buf, end, &data_len)) {
+    if (!copy_from_buf(buf, end, &data_len) || *buf + data_len > end) {
         return false;
     }
     *size = data_len;
     *dest = new uint8_t[*size];
+    if (*dest == NULL)
+        return false;
     return copy_from_buf(buf, end, *dest, *size);
 }