http2 1.5.3 → 1.5.4
raw patch · 4 files changed
+33/−7 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- ChangeLog.md +8/−0
- Network/HPACK/Buffer.hs +22/−4
- http2.cabal +1/−1
- test/HPACK/EncodeSpec.hs +2/−2
ChangeLog.md view
@@ -1,3 +1,11 @@+## 1.5.4++* Fixing a bug due to misuse of memcpy(). (#8)++## 1.5.3++* Adding debug information.+ ## 1.5.2 * Minor optimization for HPACK.
Network/HPACK/Buffer.hs view
@@ -71,16 +71,34 @@ {-# INLINE shiftLastN #-} shiftLastN :: WorkingBuffer -> Int -> Int -> IO ()+shiftLastN WorkingBuffer{..} 0 _ = return () shiftLastN WorkingBuffer{..} i len = do ptr <- readIORef offset- let !src = ptr `plusPtr` negate len- !dst = src `plusPtr` i- !ptr' = ptr `plusPtr` i+ let !ptr' = ptr `plusPtr` i if ptr' >= limit then throwIO BufferOverrun+ else if i < 0 then do+ let !src = ptr `plusPtr` negate len+ !dst = src `plusPtr` i+ shiftLeft dst src len+ writeIORef offset ptr' else do- memcpy dst src len+ let !src = ptr `plusPtr` (-1)+ !dst = ptr' `plusPtr` (-1)+ shiftRight dst src len writeIORef offset ptr'+ where+ -- memcpy cannot be used for overlapped areas.+ shiftLeft :: Buffer -> Buffer -> Int -> IO ()+ shiftLeft _ _ 0 = return ()+ shiftLeft !dst !src n = do+ peek src >>= poke dst+ shiftLeft (dst `plusPtr` 1) (src `plusPtr` 1) (n - 1)+ shiftRight :: Buffer -> Buffer -> Int -> IO ()+ shiftRight _ _ 0 = return ()+ shiftRight !dst !src n = do+ peek src >>= poke dst+ shiftRight (dst `plusPtr` (-1)) (src `plusPtr` (-1)) (n - 1) {-# INLINE copyByteString #-} copyByteString :: WorkingBuffer -> ByteString -> IO ()
http2.cabal view
@@ -1,5 +1,5 @@ Name: http2-Version: 1.5.3+Version: 1.5.4 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3
test/HPACK/EncodeSpec.hs view
@@ -37,7 +37,7 @@ go _ _ _ [] _ = return True go etbl dtbl stgy (h:hs) lens = do bs <- encodeHeader stgy 4096 etbl h `E.catch` \(E.SomeException e) -> do- putStrLn $ "decodeHeader: " ++ show e+ putStrLn $ "encodeHeader: " ++ show e print h E.throwIO e let lens' = case lens of@@ -46,7 +46,7 @@ | otherwise -> error $ show h ++ "\nshould be " ++ show l [] -> [] h' <- decodeHeader dtbl bs `E.catch` \(E.SomeException e) -> do- putStrLn $ "encodeHeader: " ++ show e+ putStrLn $ "decodeHeader: " ++ show e print h E.throwIO e if h == h' then