diff --git a/System/Glib/GString.chs b/System/Glib/GString.chs
--- a/System/Glib/GString.chs
+++ b/System/Glib/GString.chs
@@ -49,7 +49,8 @@
   | gstring == nullPtr = return Nothing
   | otherwise	       = do
     gstr <- {#get GString->str#} gstring
-    maybePeek peekCString gstr
+    len <- {#get GString->len#} gstring
+    fmap Just $ peekCStringLen (gstr, fromIntegral len)
 
 -- Turn a GList into a list of pointers (freeing the GList in the process).
 --
@@ -58,7 +59,8 @@
   | gstring == nullPtr = return Nothing
   | otherwise	       = do
     gstr <- {#get GString->str#} gstring
-    str  <- maybePeek peekCString gstr
+    len <- {#get GString->len#} gstring
+    str <- fmap Just $ peekCStringLen (gstr, fromIntegral len)
     _ <- {#call unsafe string_free#} gstring $ fromBool True
     return str
 
diff --git a/glib.cabal b/glib.cabal
--- a/glib.cabal
+++ b/glib.cabal
@@ -1,5 +1,5 @@
 Name:           glib
-Version:        0.12.5.3
+Version:        0.12.5.4
 License:        LGPL-2.1
 License-file:   COPYING
 Copyright:      (c) 2001-2010 The Gtk2Hs Team
