From 2fa9afdaba8a3a43440cc8d3da94bd2c8dfbd992 Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Wed, 17 Nov 2021 08:55:27 +0100
Subject: [PATCH] introduce magic number and version in OMF

---
 modules/io/src/mol/omf.cc | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/modules/io/src/mol/omf.cc b/modules/io/src/mol/omf.cc
index 5d62e7fd1..8068041f4 100644
--- a/modules/io/src/mol/omf.cc
+++ b/modules/io/src/mol/omf.cc
@@ -1118,6 +1118,13 @@ ost::mol::EntityHandle OMF::GetBU(int bu_idx) const{
 }
 
 void OMF::ToStream(std::ostream& stream) const {
+
+  uint32_t magic_number = 42;
+  stream.write(reinterpret_cast<char*>(&magic_number), sizeof(uint32_t));
+
+  uint32_t version = 1;
+  stream.write(reinterpret_cast<char*>(&version), sizeof(uint32_t));
+
   Dump(stream, residue_definitions_);
   Dump(stream, biounit_definitions_);
   Dump(stream, chain_data_);
@@ -1127,6 +1134,21 @@ void OMF::ToStream(std::ostream& stream) const {
 }
 
 void OMF::FromStream(std::istream& stream) {
+
+  uint32_t magic_number;
+  stream.read(reinterpret_cast<char*>(&magic_number), sizeof(uint32_t));
+  if(magic_number != 42) {
+    throw ost::Error("Cannot read corrupted OMF stream");
+  }
+
+  uint32_t version;
+  stream.read(reinterpret_cast<char*>(&version), sizeof(uint32_t));
+  if(version != 1) {
+    std::stringstream ss;
+    ss << "OST version only supports OMF version 1. Got "<<version;
+    throw ost::Error(ss.str());
+  }
+
   Load(stream, residue_definitions_);
   Load(stream, biounit_definitions_);
   Load(stream, chain_data_);
-- 
GitLab