Commit a1ace0cd authored by Rusty Russell's avatar Rusty Russell

tdb: fix tdb_check() on other-endian tdbs.

We must not endian-convert the magic string, just the rest.
parent ba2cc03f
...@@ -30,7 +30,7 @@ static bool tdb_check_header(struct tdb_context *tdb, tdb_off_t *recovery) ...@@ -30,7 +30,7 @@ static bool tdb_check_header(struct tdb_context *tdb, tdb_off_t *recovery)
{ {
struct tdb_header hdr; struct tdb_header hdr;
if (tdb->methods->tdb_read(tdb, 0, &hdr, sizeof(hdr), DOCONV()) == -1) if (tdb->methods->tdb_read(tdb, 0, &hdr, sizeof(hdr), 0) == -1)
return false; return false;
if (strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0) if (strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0)
goto corrupt; goto corrupt;
......
...@@ -19,7 +19,7 @@ int main(int argc, char *argv[]) ...@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
struct tdb_context *tdb; struct tdb_context *tdb;
TDB_DATA key, data; TDB_DATA key, data;
plan_tests(9); plan_tests(13);
tdb = tdb_open_ex("run-check.tdb", 1, TDB_CLEAR_IF_FIRST, tdb = tdb_open_ex("run-check.tdb", 1, TDB_CLEAR_IF_FIRST,
O_CREAT|O_TRUNC|O_RDWR, 0600, &taplogctx, NULL); O_CREAT|O_TRUNC|O_RDWR, 0600, &taplogctx, NULL);
...@@ -48,5 +48,18 @@ int main(int argc, char *argv[]) ...@@ -48,5 +48,18 @@ int main(int argc, char *argv[])
ok1(tdb_error(tdb) == TDB_ERR_CORRUPT); ok1(tdb_error(tdb) == TDB_ERR_CORRUPT);
tdb_close(tdb); tdb_close(tdb);
/* Big and little endian should work! */
tdb = tdb_open_ex("test/tdb-le.tdb", 1024, 0, O_RDWR, 0,
&taplogctx, NULL);
ok1(tdb);
ok1(tdb_check(tdb, NULL, NULL) == 0);
tdb_close(tdb);
tdb = tdb_open_ex("test/tdb-be.tdb", 1024, 0, O_RDWR, 0,
&taplogctx, NULL);
ok1(tdb);
ok1(tdb_check(tdb, NULL, NULL) == 0);
tdb_close(tdb);
return exit_status(); return exit_status();
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment