From fd4797a92884182e6f7f05e4f64363ddce030746 Mon Sep 17 00:00:00 2001 From: Paul Hecker Date: Mon, 21 Jan 2019 08:47:16 +0100 Subject: [PATCH 1/2] Replaced sprintf with snprintf --- src/fts-backend-xapian-functions.cpp | 23 +++++++++++------------ src/fts-backend-xapian.cpp | 14 ++++++-------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/fts-backend-xapian-functions.cpp b/src/fts-backend-xapian-functions.cpp index 8aa50ff..7e596af 100644 --- a/src/fts-backend-xapian-functions.cpp +++ b/src/fts-backend-xapian-functions.cpp @@ -537,8 +537,7 @@ static void fts_backend_xapian_oldbox(struct xapian_fts_backend *backend) /* End Performance calculator*/ i_info("Done indexing '%s' (%d msgs in %d ms, rate: %.1f)",backend->oldbox,backend->perf_nb,dt,r); - i_free(backend->oldbox); - backend->oldbox=NULL; + i_free_and_null(backend->oldbox); } } @@ -550,8 +549,7 @@ static int fts_backend_xapian_unset_box(struct xapian_fts_backend *backend) if(backend->db != NULL) { - i_free(backend->db); - backend->db = NULL; + i_free_and_null(backend->db); } if(backend->dbw !=NULL) @@ -588,8 +586,8 @@ static int fts_backend_xapian_set_box(struct xapian_fts_backend *backend, struct fts_mailbox_get_guid(box, &mb ); int l=strlen(backend->path)+strlen(mb)+5; - backend->db = (char *)i_malloc(l*sizeof(char)); - sprintf(backend->db,"%s/db_%s",backend->path,mb); + backend->db = (char *)i_malloc(l); + snprintf(backend->db,l,"%s/db_%s",backend->path,mb); backend->box = box; backend->nb_updates=0; @@ -727,7 +725,7 @@ bool fts_backend_xapian_index_hdr(Xapian::WritableDatabase * dbx, uint uid, cons try { XQuerySet xq(false); - char u[20]; sprintf(u,"%d",uid); + char u[20]; snprintf(u,20,"%d",uid); xq.add("uid",u); XResultSet *result=fts_backend_xapian_query(dbx,&xq,1); @@ -736,7 +734,7 @@ bool fts_backend_xapian_index_hdr(Xapian::WritableDatabase * dbx, uint uid, cons if(result->size<1) { doc.add_value(1,Xapian::sortable_serialise(uid)); - sprintf(u,"Q%d",uid); + snprintf(u,20,"Q%d",uid); doc.add_term(u); docid=dbx->add_document(doc); } @@ -763,11 +761,12 @@ bool fts_backend_xapian_index_hdr(Xapian::WritableDatabase * dbx, uint uid, cons XHeaderTerm xhs(p,f,strcmp(h,"XMID")==0); xhs.add(data); - char *t = (char*)i_malloc(sizeof(char)*(xhs.maxlength+6)); + int l=xhs.maxlength+6; + char *t = (char*)i_malloc(l); for(int i=0;isize<1) { doc.add_value(1,Xapian::sortable_serialise(uid)); - sprintf(u,"Q%d",uid); + snprintf(u,20,"Q%d",uid); doc.add_term(u); docid=dbx->add_document(doc); } diff --git a/src/fts-backend-xapian.cpp b/src/fts-backend-xapian.cpp index 722fb89..59fe368 100644 --- a/src/fts-backend-xapian.cpp +++ b/src/fts-backend-xapian.cpp @@ -105,9 +105,9 @@ static int fts_backend_xapian_init(struct fts_backend *_backend, const char **er } const char * path = mailbox_list_get_root_forced(_backend->ns->list, MAILBOX_LIST_PATH_TYPE_INDEX); - int l=strlen(path)+strlen(XAPIAN_FILE_PREFIX)+1; - backend->path = (char *)i_malloc((l+1)*sizeof(char)); - sprintf(backend->path,"%s/%s",path,XAPIAN_FILE_PREFIX); + int l=strlen(path)+strlen(XAPIAN_FILE_PREFIX)+2; + backend->path = (char *)i_malloc(l); + snprintf(backend->path,l,"%s/%s",path,XAPIAN_FILE_PREFIX); // i_info("FTS Xapian: Partial=%d, Full=%d DB_PATH=%s",backend->partial,backend->full,backend->path); @@ -131,10 +131,8 @@ static void fts_backend_xapian_deinit(struct fts_backend *_backend) fts_backend_xapian_unset_box(backend); - if(backend->oldbox != NULL) i_free(backend->oldbox); - backend->oldbox = NULL; - if(backend->path != NULL) i_free(backend->path); - backend->path = NULL; + if(backend->oldbox != NULL) i_free_and_null(backend->oldbox); + if(backend->path != NULL) i_free_and_null(backend->path); i_free(backend); } @@ -221,7 +219,7 @@ static void fts_backend_xapian_update_expunge(struct fts_backend_update_context try { char s[20]; - sprintf(s,"Q%d",uid); + snprintf(s,20,"Q%d",uid); backend->dbw->delete_document(s); } catch(Xapian::Error e) From d91a74d3cb70f6da5989db068ab7456b3bc62ae2 Mon Sep 17 00:00:00 2001 From: Paul Hecker Date: Mon, 21 Jan 2019 09:41:29 +0100 Subject: [PATCH 2/2] Cleaned up some logging --- src/fts-backend-xapian-functions.cpp | 14 ++++++++------ src/fts-backend-xapian.cpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/fts-backend-xapian-functions.cpp b/src/fts-backend-xapian-functions.cpp index 7e596af..1bb218e 100644 --- a/src/fts-backend-xapian-functions.cpp +++ b/src/fts-backend-xapian-functions.cpp @@ -628,6 +628,7 @@ static bool fts_backend_xapian_check_read(struct xapian_fts_backend *backend) i_info("FTS Xapian: Tried to create an existing db '%s'",backend->db); } } + try { backend->dbr = new Xapian::Database(backend->db); @@ -635,9 +636,10 @@ static bool fts_backend_xapian_check_read(struct xapian_fts_backend *backend) catch(Xapian::Error e) { i_error("FTS Xapian: Can not open RO index (%s) %s",backend->box->name,backend->db); - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); return false; } + return true; } @@ -658,7 +660,7 @@ static bool fts_backend_xapian_check_write(struct xapian_fts_backend *backend) catch(Xapian::Error e) { i_error("FTS Xapian: Can't open RW index (%s) %s",backend->box->name,backend->db); - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); return false; } return true; @@ -715,7 +717,7 @@ XResultSet * fts_backend_xapian_query(Xapian::Database * dbx, XQuerySet * query, } catch(Xapian::Error e) { - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); } return set; } @@ -784,7 +786,7 @@ bool fts_backend_xapian_index_hdr(Xapian::WritableDatabase * dbx, uint uid, cons catch(Xapian::Error e) { i_error("fts_backend_xapian_index_hdr (%s) -> %s",field,data); - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); } return false; } @@ -836,7 +838,7 @@ bool fts_backend_xapian_index_text(Xapian::WritableDatabase * dbx,uint uid, cons catch(Xapian::Error e) { i_error("fts_backend_xapian_index_text"); - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); } return false; } @@ -873,7 +875,7 @@ static int fts_backend_xapian_empty_db(const char *fpath, const struct stat *sb, } catch(Xapian::Error e) { - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); } } return 0; diff --git a/src/fts-backend-xapian.cpp b/src/fts-backend-xapian.cpp index 59fe368..d5c6d6d 100644 --- a/src/fts-backend-xapian.cpp +++ b/src/fts-backend-xapian.cpp @@ -79,28 +79,28 @@ static int fts_backend_xapian_init(struct fts_backend *_backend, const char **er } else { - i_error("fts_xapian: Invalid setting: %s", *tmp); + i_error("FTS Xapian: Invalid setting: %s", *tmp); return -1; } } if(backend->partial<2) { - i_error("fts_xapian: 'partial' can not be null (try partial=2)"); + i_error("FTS Xapian: 'partial' can not be null (try partial=2)"); return -1; } if(backend->full<1) { - i_error("fts_xapian: 'full' can not be null (try full=20)"); + i_error("FTS Xapian: 'full' can not be null (try full=20)"); return -1; } if(backend->partial > backend->full) { - i_error("fts_xapian: 'full' must be equal or greater than 'partial'"); + i_error("FTS Xapian: 'full' must be equal or greater than 'partial'"); return -1; } if(backend->full > 50) { - i_error("fts_xapian: 'full' above 50 is not realistic"); + i_error("FTS Xapian: 'full' above 50 is not realistic"); return -1; } @@ -116,7 +116,7 @@ static int fts_backend_xapian_init(struct fts_backend *_backend, const char **er { if (mailbox_list_mkdir_root(backend->backend.ns->list, backend->path, MAILBOX_LIST_PATH_TYPE_INDEX) < 0) { - i_error("fts_xapian: can not create '%s'",backend->path); + i_error("FTS Xapian: can not create '%s'",backend->path); return -1; } } @@ -154,7 +154,7 @@ static int fts_backend_xapian_get_last_uid(struct fts_backend *_backend, if(!fts_backend_xapian_check_read(backend)) { - i_error("FTX Xapian : get_last_uid: can not open DB %s",backend->db); + i_error("FTS Xapian: get_last_uid: can not open DB %s",backend->db); return -1; } @@ -165,7 +165,7 @@ static int fts_backend_xapian_get_last_uid(struct fts_backend *_backend, catch(Xapian::Error e) { i_error("fts_backend_xapian_get_last_uid %s",backend->box->name); - i_error("XapianError:%s",e.get_msg().c_str()); + i_error("XapianError: %s",e.get_msg().c_str()); return -1; } i_info("Get last UID of %s = %d",backend->box->name,*last_uid_r);