]> code.citadel.org Git - citadel.git/blobdiff - citadel/database.c
Make realy shure we don't put a NULL into memcpy
[citadel.git] / citadel / database.c
index 3bab5776d90ebe522eefb34b1c751f631de98ca1..d9080a5d716c58f39817de085cd77a217c2c213b 100644 (file)
@@ -923,24 +923,25 @@ time_t CheckIfAlreadySeen(const char *Facility,
                          long ccid,
                          long ioid)
 {
+       time_t InDBTimeStamp = 0;
        struct UseTable ut;
        struct cdbdata *cdbut;
 
        if (cType != eWrite)
        {
-               time_t InDBTimeStamp = 0;
                SEENM_syslog(LOG_DEBUG, "Loading");
                cdbut = cdb_fetch(CDB_USETABLE, SKEY(guid));
-               if (cdbut != NULL) {
+               if ((cdbut != NULL) && (cdbut->ptr != NULL)) {
                        memcpy(&ut, cdbut->ptr,
                               ((cdbut->len > sizeof(struct UseTable)) ?
                                sizeof(struct UseTable) : cdbut->len));
-                       
-                       if (ut.ut_timestamp > antiexpire)
+                       InDBTimeStamp = ut.ut_timestamp;
+
+                       if (InDBTimeStamp < antiexpire)
                        {
                                SEENM_syslog(LOG_DEBUG, "Found - Not expired.");
                                cdb_free(cdbut);
-                               return ut.ut_timestamp;
+                               return InDBTimeStamp;
                        }
                        else
                        {
@@ -951,6 +952,8 @@ time_t CheckIfAlreadySeen(const char *Facility,
                }
                else
                {
+                       if (cdbut) cdb_free(cdbut);
+
                        SEENM_syslog(LOG_DEBUG, "not Found");
                }
 
@@ -968,7 +971,7 @@ time_t CheckIfAlreadySeen(const char *Facility,
                  &ut, sizeof(struct UseTable) );
 
        SEENM_syslog(LOG_DEBUG, "Done Saving");
-       return 0;
+       return InDBTimeStamp;
 }