Skip to content

Commit

Permalink
Test fix for #7853
Browse files Browse the repository at this point in the history
  • Loading branch information
batterseapower committed Apr 23, 2013
1 parent 2b47052 commit ba5d5c4
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
28 changes: 28 additions & 0 deletions tests/IO/T7853.hs
@@ -0,0 +1,28 @@
import qualified Data.ByteString as BS
import System.IO
import GHC.Foreign
import Control.Exception
import Data.Word

decode :: TextEncoding -> BS.ByteString -> IO (Either SomeException String)
decode enc bs = try $ BS.useAsCStringLen bs $ peekCStringLen enc

main :: IO ()
main = mapM_ go [ ["01111111"] -- (just fits into 1 byte)
, ["11000010", "10000000"] -- (just large enough for 2 bytes)
, ["11000001", "10111111"] -- (overlong: only 7 bits, so should fit into 1 byte)
, ["11011111", "10111111"] -- (just fits into 2 bytes)
, ["11100000", "10100000", "10000000"] -- (just large enough for 3 bytes)
, ["11100000", "10011111", "10111111"] -- (overlong: only 11 bits, so should fit into 2 bytes)
, ["11101111", "10111111", "10111111"] -- (just fits into 3 bytes)
, ["11110000", "10010000", "10000000", "10000000"] -- (just large enough for 4 bytes)
, ["11110000", "10001111", "10111111", "10111111"] -- (overlong: only 16 bits, so should fit into 3 bytes)
, ["11110100", "10001111", "10111111", "10111111"] -- (largest allowed codepoint)
, ["11110111", "10111111", "10111111", "10111111"] -- (just fits into 4 bytes but disallowed by RFC3629)
]
where go xs = decode utf8 (BS.pack (map toByte xs)) >>= either (\_ -> putStrLn "Error") print

toByte :: String -> Word8
toByte [] = 0
toByte ('1':xs) = (2 ^ length xs) + toByte xs
toByte ('0':xs) = toByte xs
11 changes: 11 additions & 0 deletions tests/IO/T7853.stdout
@@ -0,0 +1,11 @@
"\DEL"
"\128"
Error
"\2047"
"\2048"
Error
"\65535"
"\65536"
Error
"\1114111"
Error
1 change: 1 addition & 0 deletions tests/IO/all.T
Expand Up @@ -162,3 +162,4 @@ test('encodingerror001', normal, compile_and_run, [''])

test('T4808', [exit_code(1), extra_clean(['T4808.test'])], compile_and_run, [''])
test('T4895', normal, compile_and_run, [''])
test('T7853', normal, compile_and_run, [''])

0 comments on commit ba5d5c4

Please sign in to comment.