From 818688ab0242a5d4329f9a690e6c119e4b3d34da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 8 Oct 2025 23:06:24 +0200 Subject: Handle invalid record objects Changelog: Gracefully handle invalid record objects --- src/Erebos/Object/Internal.hs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/Erebos/Object') diff --git a/src/Erebos/Object/Internal.hs b/src/Erebos/Object/Internal.hs index fdb587a..4604f13 100644 --- a/src/Erebos/Object/Internal.hs +++ b/src/Erebos/Object/Internal.hs @@ -236,11 +236,14 @@ unsafeDeserializeObject st bytes = (line, rest) | Just (otype, len) <- splitObjPrefix line -> do let (content, next) = first BL.toStrict $ BL.splitAt (fromIntegral len) $ BL.drop 1 rest guard $ B.length content == len - (,next) <$> case otype of - _ | otype == BC.pack "blob" -> return $ Blob content - | otype == BC.pack "rec" -> maybe (throwOtherError $ "malformed record item ") - (return . Rec) $ sequence $ map parseRecLine $ mergeCont [] $ BC.lines content - | otherwise -> return $ UnknownObject otype content + (, next) <$> if + | otype == BC.pack "blob" + -> return $ Blob content + | otype == BC.pack "rec" + , Just ritems <- sequence $ map parseRecLine $ mergeCont [] $ BC.lines content + -> return $ Rec ritems + | otherwise + -> return $ UnknownObject otype content _ -> throwOtherError $ "malformed object" where splitObjPrefix line = do [otype, tlen] <- return $ BLC.words line -- cgit v1.2.3