From 440efa555b08324386fa15488cefaed68a791d6e Mon Sep 17 00:00:00 2001 From: Dmitry Petukhov Date: Sun, 4 Nov 2018 19:58:04 +0500 Subject: [PATCH] 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 ] --- ccan/take/take.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ccan/take/take.c b/ccan/take/take.c index c628aac0..4833bf93 100644 --- a/ccan/take/take.c +++ b/ccan/take/take.c @@ -32,9 +32,20 @@ void *take_(const void *p, const char *label) } takenarr = new; /* Once labelarr is set, we maintain it. */ - if (labelarr) - labelarr = realloc(labelarr, - sizeof(*labelarr) * (max_taken+1)); + if (labelarr) { + const char **labelarr_new; + 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++; } if (unlikely(labelarr)) -- 2.39.2