diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2010-10-24 22:59:59 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2010-10-24 22:59:59 +0800 |
commit | b43e85cdcb9de8771ae567f1bcb4e18d3943ee53 (patch) | |
tree | af8cdf3abde8b35651748193612ad99a039c0389 | |
parent | d76d5277ab6587f3a5fcda5bf0b6c37de0cd1432 (diff) | |
download | pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.gz pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.bz2 pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.lz pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.xz pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.tar.zst pttbbs-b43e85cdcb9de8771ae567f1bcb4e18d3943ee53.zip |
for edit history, prevent the <NUL> dirty hack and use ".d"->"M.".
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5164 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/include/common.h | 1 | ||||
-rw-r--r-- | pttbbs/mbbsd/bbs.c | 21 | ||||
-rw-r--r-- | pttbbs/mbbsd/record.c | 4 |
3 files changed, 25 insertions, 1 deletions
diff --git a/pttbbs/include/common.h b/pttbbs/include/common.h index baead6ee..7609d1d0 100644 --- a/pttbbs/include/common.h +++ b/pttbbs/include/common.h @@ -59,6 +59,7 @@ #ifdef USE_EDIT_HISTORY // For edit_history, the new file name must be as short as possible so that so we can restore it later. #define FN_SAFEDEL ".d" +#define FN_SAFEDEL_PREFIX_LEN (2) // must match FN_SAFEDEL #else #define FN_SAFEDEL ".deleted" #endif // USE_EDIT_HISTORY diff --git a/pttbbs/mbbsd/bbs.c b/pttbbs/mbbsd/bbs.c index 3c94ad0e..acd74b36 100644 --- a/pttbbs/mbbsd/bbs.c +++ b/pttbbs/mbbsd/bbs.c @@ -950,7 +950,11 @@ delete_allpost(const char *userid) // usually delete_allpost are initiated by system, // so don't set normal safedel. +#ifdef FN_SAFEDEL_PREFIX_LEN + strncpy(fhdr.filename, FN_SAFEDEL, FN_SAFEDEL_PREFIX_LEN); +#else strcpy(fhdr.filename, FN_SAFEDEL); +#endif strcpy(fhdr.owner, "-"); snprintf(fhdr.title, sizeof(fhdr.title), "%s", STR_SAFEDEL_TITLE); @@ -3562,18 +3566,33 @@ view_post_history(int ent, const fileheader_t * fhdr, const char *direct) if ((!fhdr) || ((fhdr->filename[0] == '.' || !fhdr->filename[0]) && - (strcmp(fhdr->filename, FN_SAFEDEL) != 0))) { +#ifdef FN_SAFEDEL_PREFIX_LEN + (strncmp(fhdr->filename, FN_SAFEDEL, FN_SAFEDEL_PREFIX_LEN) != 0) +#else + (strcmp(fhdr->filename, FN_SAFEDEL) != 0) +#endif + )) { vmsg(err_no_history); return FULLUPDATE; } // build history index file name setdirpath(hist_file, direct, FN_EDITHISTORY "/"); + // XXX there are, well, unfortunately two kinds of deleted filename here: + // M.12345678.AAA -> + // - (old) .d<NUL>2345678.AAA # planned to be removed in the future + // - (new) .d12345678.AAA if (strcmp(FN_SAFEDEL, fhdr->filename) == 0) { assert(strlen(FN_SAFEDEL) == strlen("M.")); // M.1 is a dirty hack, anyway.. strlcat(hist_file, "M.1", sizeof(hist_file)); strlcat(hist_file, fhdr->filename + strlen(FN_SAFEDEL) + 1, sizeof(hist_file)); +#ifdef FN_SAFEDEL_PREFIX_LEN + } else if (strncmp(FN_SAFEDEL, fhdr->filename, FN_SAFEDEL_PREFIX_LEN) == 0) { + assert(FN_SAFEDEL_PREFIX_LEN == 2); // current pattern: 2 = M. + strlcat(hist_file, "M.", sizeof(hist_file)); + strlcat(hist_file, fhdr->filename + FN_SAFEDEL_PREFIX_LEN, sizeof(hist_file)); +#endif } else { strlcat(hist_file, fhdr->filename, sizeof(hist_file)); } diff --git a/pttbbs/mbbsd/record.c b/pttbbs/mbbsd/record.c index 8590e391..8ac2ab3f 100644 --- a/pttbbs/mbbsd/record.c +++ b/pttbbs/mbbsd/record.c @@ -276,7 +276,11 @@ set_safedel_fhdr(fileheader_t *fhdr, const char *newtitle) "%s <%s>", STR_SAFEDEL_TITLE, fhdr->owner); } // snprintf(fhdr->title, sizeof(fhdr->title), "%s", STR_SAFEDEL_TITLE); +#ifdef FN_SAFEDEL_PREFIX_LEN + strncpy(fhdr->filename, FN_SAFEDEL, FN_SAFEDEL_PREFIX_LEN); +#else strcpy(fhdr->filename, FN_SAFEDEL); +#endif strcpy(fhdr->owner, "-"); } |