mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Prevent possible null pointer dereference
Neither of these functions should ever be called with dc == NULL. But it's easy to prevent the potential crash. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
52ee5f28c2
commit
18d52ec86e
1 changed files with 10 additions and 7 deletions
7
dive.c
7
dive.c
|
@ -728,6 +728,8 @@ void per_cylinder_mean_depth(struct dive *dive, struct divecomputer *dc, int *me
|
||||||
|
|
||||||
for (i = 0; i < MAX_CYLINDERS; i++)
|
for (i = 0; i < MAX_CYLINDERS; i++)
|
||||||
mean[i] = duration[i] = 0;
|
mean[i] = duration[i] = 0;
|
||||||
|
if (!dc)
|
||||||
|
return;
|
||||||
struct event *ev = get_next_event(dc->events, "gaschange");
|
struct event *ev = get_next_event(dc->events, "gaschange");
|
||||||
if (!ev || (dc && dc->sample && ev->time.seconds == dc->sample[0].time.seconds && get_next_event(ev->next, "gaschange") == NULL)) {
|
if (!ev || (dc && dc->sample && ev->time.seconds == dc->sample[0].time.seconds && get_next_event(ev->next, "gaschange") == NULL)) {
|
||||||
// we have either no gas change or only one gas change and that's setting an explicit first cylinder
|
// we have either no gas change or only one gas change and that's setting an explicit first cylinder
|
||||||
|
@ -861,12 +863,13 @@ static int same_rounded_pressure(pressure_t a, pressure_t b)
|
||||||
* first cylinder - in which case cylinder 0 is indeed the first cylinder */
|
* first cylinder - in which case cylinder 0 is indeed the first cylinder */
|
||||||
int explicit_first_cylinder(struct dive *dive, struct divecomputer *dc)
|
int explicit_first_cylinder(struct dive *dive, struct divecomputer *dc)
|
||||||
{
|
{
|
||||||
|
if (dc) {
|
||||||
struct event *ev = get_next_event(dc->events, "gaschange");
|
struct event *ev = get_next_event(dc->events, "gaschange");
|
||||||
if (ev && dc && dc->sample && ev->time.seconds == dc->sample[0].time.seconds)
|
if (ev && dc->sample && ev->time.seconds == dc->sample[0].time.seconds)
|
||||||
return get_cylinder_index(dive, ev);
|
return get_cylinder_index(dive, ev);
|
||||||
else if (dc->divemode == CCR)
|
else if (dc->divemode == CCR)
|
||||||
return MAX(get_cylinder_idx_by_use(dive, DILUENT), 0);
|
return MAX(get_cylinder_idx_by_use(dive, DILUENT), 0);
|
||||||
else
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue