diff options
author | Jamey Hicks <jamey.hicks@nokia.com> | 2012-02-13 10:53:09 -0500 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-14 16:05:04 +0100 |
commit | 585f2889e0806617078fe7dc815ea9da727faa7a (patch) | |
tree | 84937be666854249e274022a1107c06e5b410f77 | |
parent | 8a0f1636d6c5b621eb726b42938cbffc7f538957 (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.pri | 3 | ||||
-rw-r--r-- | src/3rdparty/btree/src/btree.cpp | 19 | ||||
-rw-r--r-- | src/3rdparty/btree/src/btree_p.h | 12 | ||||
-rw-r--r-- | src/daemon/daemon.pro | 1 | ||||
-rw-r--r-- | tests/auto/bdb/bdb.pro | 1 | ||||
-rw-r--r-- | tests/auto/daemon/daemon.pro | 1 | ||||
-rw-r--r-- | tests/auto/qbtree/qbtree.pro | 2 | ||||
-rw-r--r-- | tests/auto/queries/queries.pro | 1 | ||||
-rw-r--r-- | tests/benchmarks/bdb/bdb.pro | 1 | ||||
-rw-r--r-- | tests/benchmarks/daemon/daemon.pro | 1 | ||||
-rw-r--r-- | tools/aodbread/aodbread.pro | 1 |
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/\\\" |