dtmail: Further Coverity fixes

This commit is contained in:
Peter Howkins
2018-04-24 02:38:56 +01:00
parent 9088d6b54e
commit 3cf92f3741
26 changed files with 113 additions and 87 deletions

View File

@@ -236,6 +236,8 @@ BufferMemory::iterate(Buffer::CallBack callback, ...)
// check for problems
if (ret) break;
}
va_end(va);
return (ret);
}

View File

@@ -1986,16 +1986,16 @@ void DtMail::MailRc::add_alternates(char *name)
* Determine the current folder directory name.
*/
int
DtMail::MailRc::getfolderdir(char *name)
DtMail::MailRc::getfolderdir(char *name, size_t buffsize)
{
char *folder;
if ((folder = mt_value("folder")) == NOSTR)
return(-1);
if (*folder == '/')
strcpy(name, folder);
snprintf(name, buffsize, "%s", folder);
else
sprintf(name, "%s/%s", mt_value("HOME"), folder);
snprintf(name, buffsize, "%s/%s", mt_value("HOME"), folder);
return(0);
}
@@ -2017,7 +2017,7 @@ DtMail::MailRc::expand(char *name)
struct stat sbuf;
char *retchr = NULL;
if (name[0] == '+' && getfolderdir(cmdbuf) >= 0) {
if (name[0] == '+' && getfolderdir(cmdbuf, LINESIZE) >= 0) {
sprintf(xname, "%s/%s", cmdbuf, name + 1);
str = expand(xname);
delete [] xname;

View File

@@ -486,8 +486,9 @@ POP3Server::uidlist_read(DtVirtArray<char*> *uidlist)
while (NULL != fgets(uidliststr, DTMAS_POPBUFSIZE, fp))
if (sscanf(uidliststr, "%d %s", &curmsg, curuidstr) == 2)
uidlist->append(strdup(uidliststr));
fclose(fp);
}
fclose(fp);
}
void
@@ -506,7 +507,6 @@ POP3Server::uidlist_write(DtVirtArray<char*> *uidlist)
uidliststr = (*uidlist)[i];
fprintf(fp, "%s\n", uidliststr);
}
fclose(fp);
}
fclose(fp);
}

View File

@@ -267,24 +267,24 @@ MIMEBodyPart::getContentType(DtMailEnv &error, char **mime_type)
{
DtMailValueSeq value;
if (mime_type)
*mime_type = (char *)0;
if (mime_type) {
*mime_type = (char *)0;
if (_body_env)
_body_env->getHeader(error, "Content-Type", DTM_FALSE, value);
if (_body_env) {
_body_env->getHeader(error, "Content-Type", DTM_FALSE, value);
}
if (_body_env && !error.isSet())
{
// Handle "Content-Type: text" problem with /usr/lib/mail.local
if (strcasecmp(*(value[0]), "text")==0)
*mime_type = strdup("text/plain");
else
*mime_type = strdup(*(value[0]));
}
else
{
error.clear();
*mime_type = strdup("text/plain");
if (_body_env && !error.isSet()) {
// Handle "Content-Type: text" problem with /usr/lib/mail.local
if (strcasecmp(*(value[0]), "text")==0) {
*mime_type = strdup("text/plain");
} else {
*mime_type = strdup(*(value[0]));
}
} else {
error.clear();
*mime_type = strdup("text/plain");
}
}
}

View File

@@ -168,7 +168,7 @@ extern "C" ssize_t pread(int, void *, size_t, off_t);
#endif
#define GET_DUMPFILE_NAME(dfn) \
sprintf(dfn, "%s/%s/dtmail.dump", getenv("HOME"), DtPERSONAL_TMP_DIRECTORY)
snprintf(dfn, sizeof(dfn), "%s/%s/dtmail.dump", getenv("HOME"), DtPERSONAL_TMP_DIRECTORY)
/*
* Local Data Definitions
@@ -216,7 +216,7 @@ void HexDump(FILE *pfp, char *pmsg, unsigned char *pbufr, int plen, int plimit)
return;
if (pfp_r == (FILE*) NULL) {
char *dumpfilename = new char [MAXPATHLEN+1];
char dumpfilename[MAXPATHLEN+1];
_Xctimeparams ctime_buf;
GET_DUMPFILE_NAME(dumpfilename);
@@ -225,7 +225,6 @@ void HexDump(FILE *pfp, char *pmsg, unsigned char *pbufr, int plen, int plimit)
memset((void*) &ctime_buf, 0, sizeof(_Xctimeparams));
fprintf(pfp_r, "--------------------- pid=%ld %s",
(long)getpid(), _XCtime(&clockTime, ctime_buf));
delete [] dumpfilename;
}
(void) fprintf(pfp_r, "--> %s (%d bytes at %p):\n", pmsg, plen, pbufr);
@@ -2042,6 +2041,9 @@ RFCMailBox::mapFile(DtMailEnv & error,
}
error.setError(DTME_NoMemory);
delete map;
#if !defined(DO_ANONYMOUS_MAP)
SafeClose(fd);
#endif
return(-1);
}
@@ -4506,7 +4508,7 @@ void
RFCMailBox::writeToDumpFile(const char *format, ...)
{
DtMailEnv error;
char *dumpfilename = new char[MAXPATHLEN+1];
char dumpfilename[MAXPATHLEN+1];
_Xctimeparams ctime_buf;
GET_DUMPFILE_NAME(dumpfilename);
@@ -4524,8 +4526,7 @@ RFCMailBox::writeToDumpFile(const char *format, ...)
fprintf(df, "---------------------\n");
fprintf(df, "\n\n");
delete [] dumpfilename;
fclose(df);
}
@@ -4558,7 +4559,7 @@ RFCMailBox::dumpMaps(const char *str)
DtMailEnv error;
off_t total_file_size = 0;
struct sigaction sig_act, old_sig_act;
char *dumpfilename = new char[MAXPATHLEN+1];
char dumpfilename[MAXPATHLEN+1];
GET_DUMPFILE_NAME(dumpfilename);
FILE *df = fopen(dumpfilename, "a");
@@ -4567,7 +4568,6 @@ RFCMailBox::dumpMaps(const char *str)
error.logError(
DTM_FALSE,
"dumpMaps(): Cant open dump file %s\n", dumpfilename);
delete [] dumpfilename;
if (SafeFStat(_fd, &buf) < 0) {
fprintf(df, "dumpMaps(): fstat(%d) failed errno=%d\n", _fd, errno);

View File

@@ -153,7 +153,7 @@ decode1522(const char * enc_start, const char * max_end, char **output, DtMail::
default:
// Invalid encoding. Assume a false match.
if (cs_name != NULL) free(cs_name);
free(cs_name);
return (enc_start);
}

View File

@@ -346,24 +346,23 @@ V3BodyPart::getContentType(DtMailEnv &error, char **v3_type)
MutexLock dt_lib_lock(_DtMutex);
DtMailValueSeq value;
if (v3_type)
*v3_type = (char *)0;
if (v3_type) {
*v3_type = (char *)0;
_body_env->getHeader(error, "Content-Type", DTM_FALSE, value);
if (error.isNotSet())
*v3_type = strdup(*(value[0]));
else
{
error.clear();
value.clear();
_body_env->getHeader(error, "X-Sun-Data-Type", DTM_FALSE, value);
if (error.isNotSet())
*v3_type = strdup(*(value[0]));
else
{
error.clear();
*v3_type = strdup("text");
}
_body_env->getHeader(error, "Content-Type", DTM_FALSE, value);
if (error.isNotSet()) {
*v3_type = strdup(*(value[0]));
} else {
error.clear();
value.clear();
_body_env->getHeader(error, "X-Sun-Data-Type", DTM_FALSE, value);
if (error.isNotSet()) {
*v3_type = strdup(*(value[0]));
} else {
error.clear();
*v3_type = strdup("text");
}
}
}
}