boost & serialisierung



  • Hallo,

    ich habe ein project, welches die boost serialisierung verwendet.
    Ich serialisiere verschiedene komplexe Klassen, die miteinander über boost::shared_ptr bzw. boost::weak_ptr verknüpft sind.
    Die De- bzw. Serialisierung funktioniert ohne Probleme.
    Allerdings wenn ich zu Testzwecken die binäre Ausgabe-Datei zufallsmäßig abändere, kann es passieren, dass ich bei der De-serialisierung folgende unbehandelte Ausnahme erhalte, und mein Debugger in der Datei
    [boost/archive/detail/iserializer.hpp:524] anhält:

    Eine Ausnahme (erste Chance) bei 0x01474243 in Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
    Unbehandelte Ausnahme bei 0x01474243 in Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.

    Mein Serialisierungs-code ist bereits in einen try/catch(...)-Block eingefasst.
    Wo liegt das Problem?

    Danke für jegliche Hilfe, Ideen, Hinweise, oder wie man sein Prog sonst vor korrupten Daten schützen kann?



  • Du dereferenzierst einen Nullzeiger.



  • Um genau zu sein, ist mir das schon klar 😉
    Das Problem liegt vielmehr darin, dass es im boost-code passiert s.o. und ich da keinen Einfluss habe.


  • Mod

    wAcKeLkOpF schrieb:

    Danke für jegliche Hilfe, Ideen, Hinweise, oder wie man sein Prog sonst vor korrupten Daten schützen kann?

    Fixe Idee: Prüfsummen?



  • Kennst Du vielleicht einen guten Link dazu?





  • Danke für den super Link!
    Kennst Du vielleicth noch einen Link für "Checksum in Kombination mit Serialisierung"?



  • wAcKeLkOpF schrieb:

    Danke für den super Link!
    Kennst Du vielleicth noch einen Link für "Checksum in Kombination mit Serialisierung"?

    Naja sollte nicht sehr schwer sein sich das was zusammen zu denken.
    Ich kenne jetzt boost serialization nicht aber im Prinzip müsstes du nur folgendes machen.

    Beim serialisieren eines Objektes:
    per boost serialization das objekt serializieren. Das ergebnis durch den Checksum generator schicken und beides zusammen dann ins eigentliche ziel (z.b. datei) speichern

    Beim deserialisieren eines Objektes:
    die checksumme und die daten vom ziel lesen. Die daten durch den Checksum generator schicken und mit der gespeicherten Checksumme vergleichen
    Wenn checksummen prüfung ok per boost das objekt deserialisieren.

    Eventuell kann das boost schon für 2009 gab es scheinbar ein GSOC thema dafür:
    https://svn.boost.org/trac/boost/wiki/soc2009


Anmelden zum Antworten