Commit 440efa55 authored by Dmitry Petukhov's avatar Dmitry Petukhov Committed by Rusty Russell

small fix for ccan/take/take.c

Hello.

I've decided to take a look at c-lighting code, because we might
consider using it in the future.

I found a small problem in ccan/take/take.c that only concerns code
that runs with CCAN_TAKE_DEBUG set (DEVELOPER=1 for c-lighting).

It is a small issue, but I decided to notify you as the author of the
code, anyway.

the issue is:
  in take_() function, potential failure of realloc for labelarr is not
  handled.

I attached a diff with a fix.

I thought that making a pull request for c-lighting would not be right,
as ccan is a separate project, but I did not find a way to report this
at http://git.ozlabs.org/, where ccan repo resides.

Therefore I wrote to you directly.

[ Minor whitespace changes --RR ]
parent c656dceb
...@@ -32,9 +32,20 @@ void *take_(const void *p, const char *label) ...@@ -32,9 +32,20 @@ void *take_(const void *p, const char *label)
} }
takenarr = new; takenarr = new;
/* Once labelarr is set, we maintain it. */ /* Once labelarr is set, we maintain it. */
if (labelarr) if (labelarr) {
labelarr = realloc(labelarr, const char **labelarr_new;
sizeof(*labelarr) * (max_taken+1)); labelarr_new = realloc(labelarr,
sizeof(*labelarr) * (max_taken+1));
if (labelarr_new) {
labelarr = labelarr_new;
} else {
/* num_taken will be out of sync with the size of
* labelarr after realloc failure.
* Just pretend that we never had labelarr allocated. */
free(labelarr);
labelarr = NULL;
}
}
max_taken++; max_taken++;
} }
if (unlikely(labelarr)) if (unlikely(labelarr))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment