diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2017-10-20 04:22:32 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-10-19 22:03:51 -0400 |
commit | e4a9787c5e6efb408dfb8280f51925e5a512b7d6 (patch) | |
tree | 5428943a9dbbd292fc414b6162ef688a14d36d72 /core | |
parent | c3274b0b9ff9cb3827ac867b0aaec545ebaa29a8 (diff) | |
download | subsurface-e4a9787c5e6efb408dfb8280f51925e5a512b7d6.tar.gz |
dive.h: add handling of NULL in get_dive_dc()
This line:
dc = &dive->dc
can SIGSEGV for a NULL 'dive' pointer.
return NULL if 'dive' is NULL.
Also handle NULL 'dc' in get_gasmix() and set 'ev' to NULL.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'core')
-rw-r--r-- | core/dive.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/core/dive.h b/core/dive.h index b02ce5f6c..64dee5196 100644 --- a/core/dive.h +++ b/core/dive.h @@ -608,7 +608,10 @@ static inline unsigned int number_of_computers(struct dive *dive) static inline struct divecomputer *get_dive_dc(struct dive *dive, int nr) { - struct divecomputer *dc = &dive->dc; + struct divecomputer *dc; + if (!dive) + return NULL; + dc = &dive->dc; while (nr-- > 0) { dc = dc->next; @@ -941,7 +944,7 @@ static inline struct gasmix *get_gasmix(struct dive *dive, struct divecomputer * if (!gasmix) { int cyl = explicit_first_cylinder(dive, dc); gasmix = &dive->cylinder[cyl].gasmix; - ev = dc->events; + ev = dc ? dc->events : NULL; } while (ev && ev->time.seconds < (unsigned int)time) { gasmix = get_gasmix_from_event(dive, ev); |