]> git.sur5r.net Git - openldap/commitdiff
Fix f97552a83abb085bc44b1b578e550d64c1313a4b
authorHoward Chu <hyc@symas.com>
Mon, 11 Mar 2013 17:28:25 +0000 (10:28 -0700)
committerHoward Chu <hyc@symas.com>
Mon, 11 Mar 2013 17:28:25 +0000 (10:28 -0700)
Causes Bus Error on SPARC

libraries/liblmdb/mdb.c

index 1d361a7bb12560e736034f8b04d22fe3f048c65a..69abea7546f1b4647f279ce0768ec2e0ff3e31fe 100644 (file)
@@ -4110,16 +4110,18 @@ mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags)
                                if (*mc->mc_dbflag & DB_STALE) {
                                        MDB_val data;
                                        int exact = 0;
+                                       uint16_t flags;
                                        MDB_node *leaf = mdb_node_search(&mc2,
                                                &mc->mc_dbx->md_name, &exact);
                                        if (!exact)
                                                return MDB_NOTFOUND;
                                        mdb_node_read(mc->mc_txn, leaf, &data);
+                                       memcpy(&flags, ((char *) data.mv_data + offsetof(MDB_db, md_flags)),
+                                               sizeof(uint16_t));
                                        /* The txn may not know this DBI, or another process may
                                         * have dropped and recreated the DB with other flags.
                                         */
-                                       if (mc->mc_db->md_flags != *(uint16_t *)
-                                               ((char *) data.mv_data + offsetof(MDB_db, md_flags)))
+                                       if (mc->mc_db->md_flags != flags)
                                                return MDB_INCOMPATIBLE;
                                        memcpy(mc->mc_db, data.mv_data, sizeof(MDB_db));
                                }