diff options
| author | Amar Tumballi <amarts@redhat.com> | 2018-07-13 14:45:31 +0530 | 
|---|---|---|
| committer | Amar Tumballi <amarts@redhat.com> | 2018-07-16 09:06:27 +0530 | 
| commit | 6c2deb080aa2df73d3cb2a5f330208d30e9c6759 (patch) | |
| tree | bf82d8e4f610babbf0334a07af7279abebead9f0 /libglusterfs | |
| parent | c688bc0197940f47bd180e2c2ab9740e3e14b71c (diff) | |
logging: check for fmts not being NULL
this fix is just a review of possible SIGSEGV issues in line 714
as per crash report at the bug:
```
08:35:25 Program terminated with signal 11, Segmentation fault.
08:35:25 #0  0x00007f4ebb491c5c in gf_time_fmt (dst=0x7f4eb1ff9a90 "", sz_dst=256, utime=1531470915, fmt=0)
at /home/jenkins/root/workspace/centos7-regression/libglusterfs/src/common-utils.h:714
```
fixes: bz#1600878
Change-Id: I160c391f8ac1a3456e59103d293b24e0e3fae718
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 3 | ||||
| -rw-r--r-- | libglusterfs/src/common-utils.h | 14 | 
2 files changed, 10 insertions, 7 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 09f0caa7e8a..d7888f526df 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -3097,9 +3097,8 @@ static const char *__gf_zerotimes[] = {  };  void -_gf_timestuff (gf_timefmts *fmt, const char ***fmts, const char ***zeros) +_gf_timestuff (const char ***fmts, const char ***zeros)  { -        *fmt = gf_timefmt_last;          *fmts = __gf_timefmts;          *zeros = __gf_zerotimes;  } diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 569147e3718..fc581de4998 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -698,19 +698,23 @@ typedef enum {  static inline char *  gf_time_fmt (char *dst, size_t sz_dst, time_t utime, unsigned int fmt)  { -        extern void _gf_timestuff (gf_timefmts *, const char ***, const char ***); +        extern void _gf_timestuff (const char ***, const char ***);          static gf_timefmts timefmt_last = (gf_timefmts) - 1;          static const char **fmts;          static const char **zeros;          struct tm tm, *res;          int localtime = 0; -        if (timefmt_last == (gf_timefmts) - 1) -                _gf_timestuff (&timefmt_last, &fmts, &zeros); -        if (timefmt_last < fmt) fmt = gf_timefmt_default; +        if (timefmt_last == ((gf_timefmts)-1)) { +                _gf_timestuff (&fmts, &zeros); +                timefmt_last = gf_timefmt_last; +        } +        if (timefmt_last <= fmt) { +                fmt = gf_timefmt_default; +        }          localtime = gf_log_get_localtime ();          res = localtime ? localtime_r (&utime, &tm) : gmtime_r (&utime, &tm); -        if (utime && res != NULL) { +        if (utime && (res != NULL)) {                  strftime (dst, sz_dst, fmts[fmt], &tm);          } else {                  strncpy (dst, "N/A", sz_dst);  | 
