summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJamey Hicks <jamey.hicks@nokia.com>2012-02-13 10:53:09 -0500
committerQt by Nokia <qt-info@nokia.com>2012-02-14 16:05:04 +0100
commit585f2889e0806617078fe7dc815ea9da727faa7a (patch)
tree84937be666854249e274022a1107c06e5b410f77
parent8a0f1636d6c5b621eb726b42938cbffc7f538957 (diff)
Use QCryptographicHash in btree
Fixes bug https://bugreports.qt.nokia.com/browse/QTBUG-23890. Change-Id: I363916b162ad888045c55cee924353447fa655d1 Reviewed-by: Jing Bai <jing.t.bai@nokia.com>
-rw-r--r--src/3rdparty/btree/btree.pri3
-rw-r--r--src/3rdparty/btree/src/btree.cpp19
-rw-r--r--src/3rdparty/btree/src/btree_p.h12
-rw-r--r--src/daemon/daemon.pro1
-rw-r--r--tests/auto/bdb/bdb.pro1
-rw-r--r--tests/auto/daemon/daemon.pro1
-rw-r--r--tests/auto/qbtree/qbtree.pro2
-rw-r--r--tests/auto/queries/queries.pro1
-rw-r--r--tests/benchmarks/bdb/bdb.pro1
-rw-r--r--tests/benchmarks/daemon/daemon.pro1
-rw-r--r--tools/aodbread/aodbread.pro1
11 files changed, 19 insertions, 24 deletions
diff --git a/src/3rdparty/btree/btree.pri b/src/3rdparty/btree/btree.pri
index 0010d082..45444048 100644
--- a/src/3rdparty/btree/btree.pri
+++ b/src/3rdparty/btree/btree.pri
@@ -19,8 +19,5 @@ SOURCES += \
$$PWD/qt/qbtreetxn.cpp \
$$PWD/qt/qbtreecursor.cpp
-!mac:LIBS += -lssl -lcrypto
-
-
diff --git a/src/3rdparty/btree/src/btree.cpp b/src/3rdparty/btree/src/btree.cpp
index a9eb3a9d..5c9a8c56 100644
--- a/src/3rdparty/btree/src/btree.cpp
+++ b/src/3rdparty/btree/src/btree.cpp
@@ -510,7 +510,7 @@ mpage_del(struct btree *bt, struct mpage *mp)
static void
mpage_flush(struct btree *bt)
{
- struct mpage *mp;
+ struct mpage *mp;
while ((mp = RB_MIN(page_cache, bt->page_cache)) != NULL) {
mpage_del(bt, mp);
@@ -1102,8 +1102,12 @@ btree_write_meta(struct btree *bt, pgno_t root, unsigned int flags, uint32_t tag
bt->meta.revisions++;
bt->meta.tag = tag;
- if (F_ISSET(bt->flags, BT_NOPGCHECKSUM))
- SHA1((unsigned char *)&bt->meta, METAHASHLEN, bt->meta.hash);
+ if (F_ISSET(bt->flags, BT_NOPGCHECKSUM)) {
+ bt->hasher->reset();
+ bt->hasher->addData((const char *)&bt->meta, METAHASHLEN);
+ QByteArray result = bt->hasher->result();
+ memcpy(bt->meta.hash, result.constData(), result.size());
+ }
/* Copy the meta data changes to the new meta page. */
meta = METADATA(mp->page);
@@ -1154,7 +1158,10 @@ btree_is_meta_page(struct btree *bt, struct page *p)
}
if (F_ISSET(bt->flags, BT_NOPGCHECKSUM)) {
- SHA1((unsigned char *)m, METAHASHLEN, hash);
+ bt->hasher->reset();
+ bt->hasher->addData((const char *)m, METAHASHLEN);
+ QByteArray result = bt->hasher->result();
+ memcpy(hash, result.constData(), result.size());
if (bcmp(hash, m->hash, SHA_DIGEST_LENGTH) != 0) {
EPRINTF("page %d has an invalid digest %.*s", p->pgno, SHA_DIGEST_LENGTH, m->hash);
@@ -1331,6 +1338,8 @@ btree_open_fd(const char *path, int fd, unsigned int flags)
}
bt = (struct btree *)calloc(1, sizeof(btree));
+ // initialize the hasher
+ bt->hasher = new QCryptographicHash(QCryptographicHash::Sha1);
if (!bt) {
EPRINTF("failed to allocate memory for btree");
@@ -1542,6 +1551,7 @@ btree_close(struct btree *bt)
DPRINTF("ref is zero, closing btree %p:%s", bt, bt->path);
close(bt->fd);
mpage_flush(bt);
+ delete bt->hasher;
free(bt->page_cache);
free(bt->lru_queue);
free(bt->path);
@@ -1560,6 +1570,7 @@ btree_close_nosync(struct btree *bt)
DPRINTF("ref is zero, closing btree %p:%s", bt, bt->path);
close(bt->fd);
mpage_flush(bt);
+ delete bt->hasher;
free(bt->page_cache);
free(bt->lru_queue);
free(bt->path);
diff --git a/src/3rdparty/btree/src/btree_p.h b/src/3rdparty/btree/src/btree_p.h
index 08df51f9..3f9a59c0 100644
--- a/src/3rdparty/btree/src/btree_p.h
+++ b/src/3rdparty/btree/src/btree_p.h
@@ -42,16 +42,11 @@
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
-#if defined(__APPLE__)
-# define COMMON_DIGEST_FOR_OPENSSL
-# include <CommonCrypto/CommonDigest.h>
-# define SHA1 CC_SHA1
-#else
-# include <openssl/sha.h>
-#endif
-
#include "btree.h"
+#include <QCryptographicHash>
+#define SHA_DIGEST_LENGTH 20 /* 160 bits */
+
#define ATTR_PACKED __attribute__((packed))
@@ -238,6 +233,7 @@ struct btree {
int ref; /* increased by cursors & txn */
struct btree_stat stat;
off_t size; /* current file size */
+ QCryptographicHash *hasher;
};
void btree_dump_tree(struct btree *bt, pgno_t pgno, int depth);
diff --git a/src/daemon/daemon.pro b/src/daemon/daemon.pro
index bd6cfd13..c9f998a3 100644
--- a/src/daemon/daemon.pro
+++ b/src/daemon/daemon.pro
@@ -4,7 +4,6 @@ target.path = $$[QT_INSTALL_PREFIX]/bin
INSTALLS += target
LIBS += -L$$QT.jsondb.libs
-!mac:LIBS += -lssl -lcrypto
QT = core network declarative
diff --git a/tests/auto/bdb/bdb.pro b/tests/auto/bdb/bdb.pro
index e36a819d..51da4ac8 100644
--- a/tests/auto/bdb/bdb.pro
+++ b/tests/auto/bdb/bdb.pro
@@ -8,7 +8,6 @@ CONFIG -= app_bundle
CONFIG += testcase
INCLUDEPATH += $$PWD/../../../src/daemon
-LIBS += -lssl -lcrypto
SOURCES += \
tst_jsondb_bdb.cpp \
diff --git a/tests/auto/daemon/daemon.pro b/tests/auto/daemon/daemon.pro
index 8f46bc84..c3753d9d 100644
--- a/tests/auto/daemon/daemon.pro
+++ b/tests/auto/daemon/daemon.pro
@@ -21,7 +21,6 @@ TESTDATA += \
INCLUDEPATH += $$PWD/../../../src/daemon
LIBS += -L$$QT.jsondb.libs
-!mac:LIBS += -lssl -lcrypto
DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git a/tests/auto/qbtree/qbtree.pro b/tests/auto/qbtree/qbtree.pro
index 7a4f57f6..c63b5683 100644
--- a/tests/auto/qbtree/qbtree.pro
+++ b/tests/auto/qbtree/qbtree.pro
@@ -6,7 +6,5 @@ QT = core testlib
CONFIG -= app_bundle
CONFIG += testcase
-LIBS += -lssl -lcrypto
-
SOURCES += \
main.cpp
diff --git a/tests/auto/queries/queries.pro b/tests/auto/queries/queries.pro
index 30405c4f..d76b785e 100644
--- a/tests/auto/queries/queries.pro
+++ b/tests/auto/queries/queries.pro
@@ -6,7 +6,6 @@ CONFIG += testcase
INCLUDEPATH += $$PWD/../../../src/daemon
LIBS += -L$$QT.jsondb.libs
-!mac:LIBS += -lssl -lcrypto
DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git a/tests/benchmarks/bdb/bdb.pro b/tests/benchmarks/bdb/bdb.pro
index 33884aeb..c3bbc009 100644
--- a/tests/benchmarks/bdb/bdb.pro
+++ b/tests/benchmarks/bdb/bdb.pro
@@ -7,7 +7,6 @@ CONFIG -= app_bundle
INCLUDEPATH += $$PWD/../../../src/daemon
LIBS += -L$$QT.jsondb.libs
-!mac:LIBS += -lssl -lcrypto
DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git a/tests/benchmarks/daemon/daemon.pro b/tests/benchmarks/daemon/daemon.pro
index 9f47f4fa..ce853566 100644
--- a/tests/benchmarks/daemon/daemon.pro
+++ b/tests/benchmarks/daemon/daemon.pro
@@ -6,7 +6,6 @@ CONFIG += testcase
INCLUDEPATH += $$PWD/../../../src/daemon
LIBS += -L$$QT.jsondb.libs
-!mac:LIBS += -lssl -lcrypto
DEFINES += SRCDIR=\\\"$$PWD/\\\"
include($$PWD/../../../src/daemon/daemon.pri)
diff --git a/tools/aodbread/aodbread.pro b/tools/aodbread/aodbread.pro
index 850ad1aa..743ed8ec 100644
--- a/tools/aodbread/aodbread.pro
+++ b/tools/aodbread/aodbread.pro
@@ -6,7 +6,6 @@ CONFIG += debug
INCLUDEPATH += $$PWD/../../src/daemon
LIBS += -L$$QT.jsondb.libs
-!mac:LIBS += -lssl -lcrypto
DEFINES += SRCDIR=\\\"$$PWD/\\\"