From e7ee6456c3f3750cd3f1ed4cb6844da08fa133cd Mon Sep 17 00:00:00 2001 From: VladimirStarostenkov Date: Thu, 20 Dec 2012 06:40:06 -0800 Subject: [PATCH] Fix overflow caused by wrong sizeof argument Add a couple of useful checks --- src/server/req_jobobit.c | 8 +++++++- src/server/test/req_jobobit/scaffolding.c | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/server/req_jobobit.c b/src/server/req_jobobit.c index 8a75ab288c..06ceabdbfe 100644 --- a/src/server/req_jobobit.c +++ b/src/server/req_jobobit.c @@ -822,7 +822,13 @@ int handle_exiting_or_abort_substate( char job_id[PBS_MAXSVRJOBID+1]; char log_buf[LOCAL_LOG_BUF_SIZE+1]; - strcpy(job_id, pjob->ji_qs.ji_jobid); + if (pjob == NULL) + { + log_err(PBSE_BAD_PARAMETER, __func__, "NULL input job pointer"); + return(PBSE_BAD_PARAMETER); + } + strncpy(job_id, pjob->ji_qs.ji_jobid, sizeof(job_id) - 1); + job_id[sizeof(job_id) - 1] = '\0'; if (LOGLEVEL >= 2) { diff --git a/src/server/test/req_jobobit/scaffolding.c b/src/server/test/req_jobobit/scaffolding.c index aa87084594..135af9657f 100644 --- a/src/server/test/req_jobobit/scaffolding.c +++ b/src/server/test/req_jobobit/scaffolding.c @@ -244,8 +244,11 @@ job *svr_find_job(char *jobid, int get_subjob) if (bad_job == 0) { - pjob = calloc(1, sizeof(pjob)); - strcpy(pjob->ji_qs.ji_jobid, jobid); + pjob = calloc(1, sizeof(*pjob)); + if (jobid != NULL) + { + strncpy(pjob->ji_qs.ji_jobid, jobid, sizeof(pjob->ji_qs.ji_jobid)-1); + } pjob->ji_wattr[JOB_ATR_reported].at_flags = ATR_VFLAG_SET; if (reported)