1.1 --- a/libexec/lib/src/elf.cc Mon Apr 03 19:35:35 2023 +0200
1.2 +++ b/libexec/lib/src/elf.cc Mon Apr 03 22:10:42 2023 +0200
1.3 @@ -100,6 +100,11 @@
1.4 PayloadVariant<HEADER, PROGRAM_HEADER>::PayloadVariant(HEADER *header)
1.5 : _header(header)
1.6 {
1.7 + /* Record the number of segments since various methods depend on it, but the
1.8 + header data may be unavailable when it is used, upon destruction, for
1.9 + example. */
1.10 +
1.11 + _nsegments = _header->e_phnum;
1.12 }
1.13
1.14 /* Specific payload destruction. */
1.15 @@ -111,6 +116,8 @@
1.16 {
1.17 for (unsigned int i = 0; i < segments(); i++)
1.18 delete _segments[i];
1.19 +
1.20 + delete _segments;
1.21 }
1.22 }
1.23
1.24 @@ -135,7 +142,7 @@
1.25 template <typename HEADER, typename PROGRAM_HEADER>
1.26 unsigned int PayloadVariant<HEADER, PROGRAM_HEADER>::segments()
1.27 {
1.28 - return _header->e_phnum;
1.29 + return _nsegments;
1.30 }
1.31
1.32 template <typename HEADER, typename PROGRAM_HEADER>