[pypy-commit] pypy default: null chars

fijal noreply at buildbot.pypy.org
Tue May 13 11:32:05 CEST 2014


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: 
Changeset: r71485:d334c17b0e39
Date: 2014-05-13 11:31 +0200
http://bitbucket.org/pypy/pypy/changeset/d334c17b0e39/

Log:	null chars

diff --git a/lib-python/2.7/test/test_gdbm.py b/lib-python/2.7/test/test_gdbm.py
--- a/lib-python/2.7/test/test_gdbm.py
+++ b/lib-python/2.7/test/test_gdbm.py
@@ -87,6 +87,17 @@
         self.g = gdbm.open(filename, 'r')
         self.assertEquals(self.g['x'], 'x' * 10000)
 
+    def test_key_with_null_bytes(self):
+        key = 'a\x00b'
+        value = 'c\x00d'
+        self.g = gdbm.open(filename, 'cf')
+        self.g[key] = value
+        self.g.close()
+        self.g = gdbm.open(filename, 'r')
+        self.assertEquals(self.g[key], value)
+        self.assertTrue(key in self.g)
+        self.assertTrue(self.g.has_key(key))
+
 def test_main():
     run_unittest(TestGdbm)
 
diff --git a/lib_pypy/gdbm.py b/lib_pypy/gdbm.py
--- a/lib_pypy/gdbm.py
+++ b/lib_pypy/gdbm.py
@@ -90,7 +90,7 @@
         drec = lib.gdbm_fetch(self.ll_dbm, _fromstr(key))
         if not drec.dptr:
             raise KeyError(key)
-        res = ffi.string(drec.dptr, drec.dsize)
+        res = str(ffi.buffer(drec.dptr, drec.dsize))
         lib.free(drec.dptr)
         return res
 
@@ -99,7 +99,7 @@
         l = []
         key = lib.gdbm_firstkey(self.ll_dbm)
         while key.dptr:
-            l.append(ffi.string(key.dptr, key.dsize))
+            l.append(str(ffi.buffer(key.dptr, key.dsize)))
             nextkey = lib.gdbm_nextkey(self.ll_dbm, key)
             lib.free(key.dptr)
             key = nextkey
@@ -109,7 +109,7 @@
         self._check_closed()
         key = lib.gdbm_firstkey(self.ll_dbm)
         if key.dptr:
-            res = ffi.string(key.dptr, key.dsize)
+            res = str(ffi.buffer(key.dptr, key.dsize))
             lib.free(key.dptr)
             return res
 
@@ -117,7 +117,7 @@
         self._check_closed()
         key = lib.gdbm_nextkey(self.ll_dbm, _fromstr(key))
         if key.dptr:
-            res = ffi.string(key.dptr, key.dsize)
+            res = str(ffi.buffer(key.dptr, key.dsize))
             lib.free(key.dptr)
             return res
 


More information about the pypy-commit mailing list