serialization: file version verification 76/205476/1
authorAdrian Szyndela <adrian.s@samsung.com>
Mon, 6 May 2019 11:57:56 +0000 (13:57 +0200)
committerAdrian Szyndela <adrian.s@samsung.com>
Mon, 6 May 2019 11:59:46 +0000 (13:59 +0200)
This adds flatbuffers file identifier and uses it during
verification.

Change-Id: I2d49607d8c5ca0b9678e9bc68a9dc6201ef4c7b5

src/dbuspolicy_printer.cpp
src/internal/include/fb.fbs
src/internal/include/fb_generated.h
src/internal/serializer.cpp
src/internal/storage_backend_serialized.cpp

index 4ea8c30..25a45fa 100644 (file)
@@ -69,7 +69,7 @@ int main(int argc, char *argv[]) {
 
        ldp_serialized::StorageBackendSerialized storage;
 
-       if (!storage.init(input_filename.c_str(), true)) {
+       if (!storage.init(input_filename.c_str(), just_verify)) {
                if (just_verify)
                        cout << input_filename << ": FAILED" << endl;
                return EXIT_FAILURE;
index c0e88c8..8fce719 100644 (file)
@@ -108,3 +108,5 @@ table DecisionItem {
 }
 
 root_type File;
+
+file_identifier "LDP1";
index 95d8eec..ce371e4 100644 (file)
@@ -74,7 +74,7 @@ inline const char * const *EnumNamesDecision() {
 
 inline const char *EnumNameDecision(Decision e) {
   if (e < Decision_ANY || e > Decision_CHECK) return "";
-  const size_t index = static_cast<int>(e);
+  const size_t index = static_cast<size_t>(e);
   return EnumNamesDecision()[index];
 }
 
@@ -110,7 +110,7 @@ inline const char * const *EnumNamesBusAccessType() {
 
 inline const char *EnumNameBusAccessType(BusAccessType e) {
   if (e < BusAccessType_USER || e > BusAccessType_ALL_GROUPS) return "";
-  const size_t index = static_cast<int>(e);
+  const size_t index = static_cast<size_t>(e);
   return EnumNamesBusAccessType()[index];
 }
 
@@ -149,7 +149,7 @@ inline const char * const *EnumNamesMessageType() {
 
 inline const char *EnumNameMessageType(MessageType e) {
   if (e < MessageType_ANY || e > MessageType_SIGNAL) return "";
-  const size_t index = static_cast<int>(e);
+  const size_t index = static_cast<size_t>(e);
   return EnumNamesMessageType()[index];
 }
 
@@ -1417,26 +1417,35 @@ inline const FB::File *GetSizePrefixedFile(const void *buf) {
   return flatbuffers::GetSizePrefixedRoot<FB::File>(buf);
 }
 
+inline const char *FileIdentifier() {
+  return "LDP1";
+}
+
+inline bool FileBufferHasIdentifier(const void *buf) {
+  return flatbuffers::BufferHasIdentifier(
+      buf, FileIdentifier());
+}
+
 inline bool VerifyFileBuffer(
     flatbuffers::Verifier &verifier) {
-  return verifier.VerifyBuffer<FB::File>(nullptr);
+  return verifier.VerifyBuffer<FB::File>(FileIdentifier());
 }
 
 inline bool VerifySizePrefixedFileBuffer(
     flatbuffers::Verifier &verifier) {
-  return verifier.VerifySizePrefixedBuffer<FB::File>(nullptr);
+  return verifier.VerifySizePrefixedBuffer<FB::File>(FileIdentifier());
 }
 
 inline void FinishFileBuffer(
     flatbuffers::FlatBufferBuilder &fbb,
     flatbuffers::Offset<FB::File> root) {
-  fbb.Finish(root);
+  fbb.Finish(root, FileIdentifier());
 }
 
 inline void FinishSizePrefixedFileBuffer(
     flatbuffers::FlatBufferBuilder &fbb,
     flatbuffers::Offset<FB::File> root) {
-  fbb.FinishSizePrefixed(root);
+  fbb.FinishSizePrefixed(root, FileIdentifier());
 }
 
 }  // namespace FB
index 7d244c8..b2b5de9 100644 (file)
@@ -107,7 +107,7 @@ uint8_t* Serializer::serialize(const ldp_xml::StorageBackendXML &db, size_t &siz
                                   receive_set,
                                   access_set);
 
-       m_builder.Finish(file);
+       m_builder.Finish(file, FB::FileIdentifier());
        uint8_t* buf = m_builder.GetBufferPointer();
        size = m_builder.GetSize();
 
index f5c03e1..7c880d9 100644 (file)
@@ -128,7 +128,7 @@ bool StorageBackendSerialized::StorageBackendSerializedImpl::init(const char *fi
 
        if (verify) {
                auto verifier = flatbuffers::Verifier(mem, length);
-               if (!FB::VerifyFileBuffer(verifier)) {
+               if (!FB::VerifyFileBuffer(verifier) || !FB::FileBufferHasIdentifier(mem)) {
                        tslog::log_error("verification of serialized data: failed\n");
                        return false;
                }