NULL key is allowed for MDB_CURRENT
authorHoward Chu <hyc@symas.com>
Fri, 1 Feb 2013 14:19:23 +0000 (06:19 -0800)
committerHoward Chu <hyc@symas.com>
Fri, 1 Feb 2013 14:19:23 +0000 (06:19 -0800)
libraries/liblmdb/mdb.c

index 578e6b6..36b02a3 100644 (file)
@@ -1095,6 +1095,10 @@ mdb_dkey(MDB_val *key, char *buf)
        char *ptr = buf;
        unsigned char *c = key->mv_data;
        unsigned int i;
+
+       if (!key)
+               return "";
+
        if (key->mv_size > MDB_MAXKEYSIZE)
                return "MDB_MAXKEYSIZE";
        /* may want to make this a dynamic check: if the key is mostly
@@ -4823,7 +4827,7 @@ mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data,
        if (F_ISSET(mc->mc_txn->mt_flags, MDB_TXN_RDONLY))
                return EACCES;
 
-       if (key->mv_size == 0 || key->mv_size > MDB_MAXKEYSIZE)
+       if (flags != MDB_CURRENT && (key->mv_size == 0 || key->mv_size > MDB_MAXKEYSIZE))
                return EINVAL;
 
        if (F_ISSET(mc->mc_db->md_flags, MDB_DUPSORT) && data->mv_size > MDB_MAXKEYSIZE)