diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-07-02 19:46:24 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-07-02 19:46:24 +0300 |
commit | b4333893277f7e4e4b5e673c158cc8b68ce1ea93 (patch) | |
tree | 379eae4af3a8d9ade7c4bdff96430b65213ef1c8 | |
parent | 030e685eb9df82f63d73a1bf206da84b7aa52374 (diff) | |
download | gdbm-b4333893277f7e4e4b5e673c158cc8b68ce1ea93.tar.gz gdbm-b4333893277f7e4e4b5e673c158cc8b68ce1ea93.tar.bz2 |
Bugfixes
* src/recover.c (backup_name): Fix memory overwrite.
* src/gdbmtool.c (recover_handler): New option "force".
-rw-r--r-- | src/gdbmtool.c | 6 | ||||
-rw-r--r-- | src/recover.c | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/gdbmtool.c b/src/gdbmtool.c index 5ae668c..454465e 100644 --- a/src/gdbmtool.c +++ b/src/gdbmtool.c | |||
@@ -591,13 +591,16 @@ recover_handler (struct handler_param *param) | |||
591 | rcvr.errfun = err_printer; | 591 | rcvr.errfun = err_printer; |
592 | flags |= GDBM_RCVR_ERRFUN; | 592 | flags |= GDBM_RCVR_ERRFUN; |
593 | } | 593 | } |
594 | else if (strcmp (arg, "force") == 0) | ||
595 | { | ||
596 | flags |= GDBM_RCVR_FORCE; | ||
597 | } | ||
594 | else if (strcmp (arg, "summary") == 0) | 598 | else if (strcmp (arg, "summary") == 0) |
595 | { | 599 | { |
596 | summary = 1; | 600 | summary = 1; |
597 | } | 601 | } |
598 | else if (strcmp (arg, "backup") == 0) | 602 | else if (strcmp (arg, "backup") == 0) |
599 | { | 603 | { |
600 | rcvr.errfun = err_printer; | ||
601 | flags |= GDBM_RCVR_BACKUP; | 604 | flags |= GDBM_RCVR_BACKUP; |
602 | } | 605 | } |
603 | else if (strncmp (arg, "max-failures=", 13) == 0) | 606 | else if (strncmp (arg, "max-failures=", 13) == 0) |
@@ -1263,6 +1266,7 @@ struct command command_tab[] = { | |||
1263 | { { "[verbose]", GDBM_ARG_STRING }, | 1266 | { { "[verbose]", GDBM_ARG_STRING }, |
1264 | { "[summary]", GDBM_ARG_STRING }, | 1267 | { "[summary]", GDBM_ARG_STRING }, |
1265 | { "[backup]", GDBM_ARG_STRING }, | 1268 | { "[backup]", GDBM_ARG_STRING }, |
1269 | { "[force]", GDBM_ARG_STRING }, | ||
1266 | { "[max-failed-keys=N]", GDBM_ARG_STRING }, | 1270 | { "[max-failed-keys=N]", GDBM_ARG_STRING }, |
1267 | { "[max-failed-buckets=N]", GDBM_ARG_STRING }, | 1271 | { "[max-failed-buckets=N]", GDBM_ARG_STRING }, |
1268 | { "[max-failures=N]", GDBM_ARG_STRING }, | 1272 | { "[max-failures=N]", GDBM_ARG_STRING }, |
diff --git a/src/recover.c b/src/recover.c index f6859ea..a64a1b4 100644 --- a/src/recover.c +++ b/src/recover.c | |||
@@ -52,7 +52,7 @@ backup_name (char const *name) | |||
52 | 52 | ||
53 | #define INITIAL_SUFFIX ".~1~" | 53 | #define INITIAL_SUFFIX ".~1~" |
54 | 54 | ||
55 | len = strlen (name + sizeof (INITIAL_SUFFIX)); | 55 | len = strlen (name) + sizeof (INITIAL_SUFFIX); |
56 | buf = malloc (len); | 56 | buf = malloc (len); |
57 | if (!buf) | 57 | if (!buf) |
58 | return NULL; | 58 | return NULL; |