Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP5:GA
logrotate
logrotate-3.8.7-hashIndex-return.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File logrotate-3.8.7-hashIndex-return.patch of Package logrotate
From 2265928c5e85d56d6c64cf696cfaeba325ef39b3 Mon Sep 17 00:00:00 2001 From: Kamil Dudka <kdudka@redhat.com> Date: Wed, 8 Feb 2017 10:41:47 +0100 Subject: [PATCH] hashIndex: return failure if hash table is not yet allocated ... instead of raising SIGFPE due to division by zero --- logrotate.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) Index: logrotate-3.8.7/logrotate.c =================================================================== --- logrotate-3.8.7.orig/logrotate.c +++ logrotate-3.8.7/logrotate.c @@ -215,9 +215,12 @@ static int allocateHash(unsigned int hs) } #define HASH_CONST 13 -static unsigned hashIndex(const char *fn) +static int hashIndex(const char *fn) { unsigned hash = 0; + if (!hashSize) + /* hash table not yet allocated */ + return -1; while (*fn) { hash *= HASH_CONST; @@ -259,8 +262,11 @@ static struct logState *newState(const c static struct logState *findState(const char *fn) { - unsigned int i = hashIndex(fn); + const int i = hashIndex(fn); struct logState *p; + if (i < 0) + /* hash table not yet allocated */ + return NULL; for (p = states[i]->head.lh_first; p != NULL; p = p->list.le_next) if (!strcmp(fn, p->fn)) @@ -841,6 +847,9 @@ int findNeedRotating(struct logInfo *log } state = findState(log->files[logNum]); + if (!state) + return 1; + state->doRotate = 0; state->sb = sb; @@ -1653,11 +1662,12 @@ int rotateLogSet(struct logInfo *log, in } for (i = 0; i < log->numFiles; i++) { + struct logState *logState; logHasErrors[i] = findNeedRotating(log, i, force); hasErrors |= logHasErrors[i]; /* sure is a lot of findStating going on .. */ - if ((findState(log->files[i]))->doRotate) + if (((logState = findState(log->files[i]))) && logState->doRotate) numRotated++; } @@ -1693,6 +1703,8 @@ int rotateLogSet(struct logInfo *log, in ((log->flags & LOG_FLAG_SHAREDSCRIPTS) && i < log->numFiles) || (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && i == j); i++) { state[i] = findState(log->files[i]); + if (!state[i]) + logHasErrors[i] = 1; rotNames[i] = malloc(sizeof(struct logNames)); memset(rotNames[i], 0, sizeof(struct logNames));
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor