From c13a4ddf0f4bfd0e980b799f3d089f6e4df3e84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 7 Jun 2006 17:15:45 +0000 Subject: [PATCH] Unflattening R5/Dano messages are both using the TReadHelper class which throws exceptions in case of an error. Therefore, whenever those methods are called, we need to surround them with a try/catch block. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17766 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/app/Message.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/kits/app/Message.cpp b/src/kits/app/Message.cpp index 629c9f8ba4..71e38cc552 100644 --- a/src/kits/app/Message.cpp +++ b/src/kits/app/Message.cpp @@ -1040,13 +1040,18 @@ BMessage::Unflatten(const char *flatBuffer) return convert_message(&message, this); } - if (format == kMessageMagicR5 || format == kMessageMagicR5Swapped) - return BPrivate::unflatten_r5_message(format, this, flatBuffer); + try { + if (format == kMessageMagicR5 || format == kMessageMagicR5Swapped) + return BPrivate::unflatten_r5_message(format, this, flatBuffer); - if (format == kMessageMagicDano || format == kMessageMagicDanoSwapped) { - BMemoryIO stream(flatBuffer + sizeof(uint32), - BPrivate::dano_message_flattened_size(flatBuffer)); - return BPrivate::unflatten_dano_message(format, stream, *this); + if (format == kMessageMagicDano || format == kMessageMagicDanoSwapped) { + BMemoryIO stream(flatBuffer + sizeof(uint32), + BPrivate::dano_message_flattened_size(flatBuffer)); + return BPrivate::unflatten_dano_message(format, stream, *this); + } + } catch (status_t error) { + MakeEmpty(); + return error; } return B_NOT_A_MESSAGE; @@ -1122,11 +1127,16 @@ BMessage::Unflatten(BDataIO *stream) uint32 format = 0; stream->Read(&format, sizeof(uint32)); if (format != kMessageMagicHaiku) { - if (format == kMessageMagicR5 || format == kMessageMagicR5Swapped) - return BPrivate::unflatten_r5_message(format, this, stream); + try { + if (format == kMessageMagicR5 || format == kMessageMagicR5Swapped) + return BPrivate::unflatten_r5_message(format, this, stream); - if (format == kMessageMagicDano || format == kMessageMagicDanoSwapped) - return BPrivate::unflatten_dano_message(format, *stream, *this); + if (format == kMessageMagicDano || format == kMessageMagicDanoSwapped) + return BPrivate::unflatten_dano_message(format, *stream, *this); + } catch (status_t error) { + MakeEmpty(); + return error; + } return B_NOT_A_MESSAGE; }