]> granicus.if.org Git - php/commitdiff
- Fixed Bug #38698 for some keys cdbmake creates corrupted db and cdb can't read...
authorMarcus Boerger <helly@php.net>
Wed, 1 Nov 2006 00:11:49 +0000 (00:11 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 1 Nov 2006 00:11:49 +0000 (00:11 +0000)
ext/dba/libcdb/cdb.c
ext/dba/tests/bug38698.phpt [new file with mode: 0755]

index acafe952f3c198383dd6806711c9b6a158b4b63b..af6e1bb8f0a83a33a6fd2f50ba9b68eba5c3c7f5 100644 (file)
@@ -68,10 +68,11 @@ static int cdb_match(struct cdb *c, char *key, unsigned int len, uint32 pos TSRM
 uint32 cdb_hash(char *buf, unsigned int len)
 {
        uint32 h;
+       const unsigned char * b = buf;
 
        h = CDB_HASHSTART;
        while (len--) {
-               h = ( h + (h << 5)) ^ (*buf++);
+               h = ( h + (h << 5)) ^ (*b++);
        }
        return h;
 }
diff --git a/ext/dba/tests/bug38698.phpt b/ext/dba/tests/bug38698.phpt
new file mode 100755 (executable)
index 0000000..09f47e3
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Bug #38698 (Bug #38698 for some keys cdbmake creates corrupted db and cdb can't read valid db)
+--SKIPIF--
+<?php 
+       $handler = 'cdb_make';
+       require_once('skipif.inc');
+?>
+--FILE--
+<?php
+
+$db_file = '129php.cdb';
+
+if (($db_make=dba_open($db_file, "n", 'cdb_make'))!==FALSE) {
+       dba_insert(pack('i',129), "Booo!", $db_make);
+       dba_close($db_make);
+       // write md5 checksum of generated database file
+       var_dump(md5_file($db_file));
+       @unlink($db_file);
+} else {
+    echo "Error creating database\n";
+}
+?>
+===DONE===
+--EXPECTF--
+string(32) "1f34b74bde3744265acfc21e0f30af95"
+===DONE===