Ack. With "our selfs" corrected to "ourselves" in the comment :-)

   Linus
On Dec 11, 2014 11:59 PM, "Anton Lundin" <gla...@acc.umu.se> wrote:

> We rely on samples being NULL if a dc have no samples. Its completely
> legal for malloc to return a valid pointer to nowhere for zero sized
> malloc, which you can't follow and read what its pointing at. Its only
> viable to call free() on.
>
> In other code, if samples is a valid pointer, we dereference it and look
> at the first sample.
>
> Signed-off-by: Anton Lundin <gla...@acc.umu.se>
> ---
>  dive.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/dive.c b/dive.c
> index 8e8330f..4cf532f 100644
> --- a/dive.c
> +++ b/dive.c
> @@ -602,6 +602,14 @@ void copy_samples(struct divecomputer *s, struct
> divecomputer *d)
>         int nr = s->samples;
>         d->samples = nr;
>         d->alloc_samples = nr;
> +       // We expect to be able to read the memory in the other end of the
> pointer
> +       // if its a valid pointer, so don't expect malloc() to return NULL
> for
> +       // zero-sized malloc, do it our selfs.
> +       d->sample = NULL;
> +
> +       if(!nr)
> +               return;
> +
>         d->sample = malloc(nr * sizeof(struct sample));
>         if (d->sample)
>                 memcpy(d->sample, s->sample, nr * sizeof(struct sample));
> --
> 2.1.0
>
> _______________________________________________
> subsurface mailing list
> subsurface@subsurface-divelog.org
> http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
>
_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to