diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for binary-parsec
 
+## 0.2.4.0  -- 2016-09-28
+
+* Bugfix: https://github.com/winterland1989/binary-parsers/pull/5
+
 ## 0.2.3.0  -- 2016-09-28
 
 * Remove `MultiWayIf` to support older GHC (7.4 and 7.6).
diff --git a/Data/Binary/Parser/Word8.hs b/Data/Binary/Parser/Word8.hs
--- a/Data/Binary/Parser/Word8.hs
+++ b/Data/Binary/Parser/Word8.hs
@@ -126,8 +126,8 @@
 skipN n = do
     bs <- get
     let l = B.length bs
-    if l >= n then put (B.unsafeDrop n bs)
-              else put B.empty >> skip (l - n)
+    if l > n then put (B.unsafeDrop n bs)
+             else skip n
 {-# INLINE skipN #-}
 
 -- | Consume input as long as the predicate returns 'False' or reach the end of input,
diff --git a/binary-parsers.cabal b/binary-parsers.cabal
--- a/binary-parsers.cabal
+++ b/binary-parsers.cabal
@@ -1,5 +1,5 @@
 name:                binary-parsers
-version:             0.2.3.0
+version:             0.2.4.0
 synopsis:            Extends binary with parsec/attoparsec style parsing combinators.
 description:         Extends binary with parsec/attoparsec style parsing combinators.
 license:             BSD3
diff --git a/tests/QC/ByteString.hs b/tests/QC/ByteString.hs
--- a/tests/QC/ByteString.hs
+++ b/tests/QC/ByteString.hs
@@ -22,13 +22,19 @@
 import qualified Data.ByteString.Lazy as L
 import qualified Data.ByteString.Lazy.Char8 as L8
 
+newtype ASCIIChar = ASCIIChar Char
+    deriving (Eq, Ord, Show, Read)
+instance Arbitrary ASCIIChar where
+    arbitrary = ASCIIChar <$> choose ('\0', '\127')
+    shrink (ASCIIChar c) = ASCIIChar <$> shrink c
+
 -- Basic byte-level combinators.
 
 satisfy :: Word8 -> L.ByteString -> Property
 satisfy w s = parseBS (P.satisfy (<=w)) (L.cons w s) === Just w
 
-satisfyWith :: Char -> L.ByteString -> Property
-satisfyWith c s = parseBS (P.satisfyWith (chr . fromIntegral) (<=c))
+satisfyWith :: ASCIIChar -> L.ByteString -> Property
+satisfyWith (ASCIIChar c) s = parseBS (P.satisfyWith (chr . fromIntegral) (<=c))
                          (L.cons (fromIntegral (ord c)) s) === Just c
 
 word8 :: Word8 -> L.ByteString -> Property
