From 2283513fdd96122f9d72a8f7e4d8d2b4ed7919b4 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Thu, 4 Jul 2019 20:51:43 -0400 Subject: Fixed ascii-armor detection. --- lib/KeyRing/BuildKeyDB.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/KeyRing/BuildKeyDB.hs b/lib/KeyRing/BuildKeyDB.hs index 10e2d41..24b39b1 100644 --- a/lib/KeyRing/BuildKeyDB.hs +++ b/lib/KeyRing/BuildKeyDB.hs @@ -32,7 +32,7 @@ import Data.ASN1.Types (ASN1 (BitString, End, IntVal, Null, OID, Start fromASN1, toASN1) import Data.Binary import Data.Bits ((.&.), (.|.)) -import Data.Bits (Bits) +import Data.Bits (Bits, testBit) import qualified Data.ByteString as S (ByteString, breakSubstring, concat, drop, hGetContents, hPutStr, length, null, @@ -41,7 +41,7 @@ import Data.ByteString.Lazy (ByteString) import qualified Data.ByteString.Lazy as L (ByteString, concat, empty, fromChunks, hGetContents, null, readFile, toChunks, - toStrict) + toStrict, head) import Data.Char import Data.Function import Data.List @@ -318,13 +318,16 @@ decodeOrFail bs = Right (L.empty,1,decode bs) readPacketsFromFile :: InputFileContext -> InputFile -> IO (PacketsCodec, Message) readPacketsFromFile ctx fname = do - -- warn $ fname ++ ": reading..." input <- readInputFileL ctx fname - return $ case decodeOrFail input of - Right (more,_,pkt) -> (,) BinaryPackets $ Message $ pkt : decodePacketList more - Left (_,_,_) -> case ASCIIArmor.decodeLazy input of + let tryBinary = case decodeOrFail input of + Right (more,_,pkt) -> (,) BinaryPackets $ Message $ pkt : decodePacketList more + Left (_,_,_) -> tryAscii + tryAscii = case ASCIIArmor.decodeLazy input of Right (Armor pubOrSec headers bs:_) -> (,) AsciiArmor $ Message $ decodePacketList bs _ -> (,) DetectAscii $ Message [] + return $ if L.null input || testBit (L.head input) 7 + then tryBinary + else tryAscii readPacketsFromWallet :: Maybe Packet -- cgit v1.2.3