From aconole at bytheb.org Mon Jun 24 12:59:29 2019 From: aconole at bytheb.org (Aaron Conole) Date: Mon, 24 Jun 2019 08:59:29 -0400 Subject: [esnacc-dev] [PATCH] cxx-lib/src: corrected usage of 'delete' causing uncleared memory. Message-ID: <20190624125929.8927-1-aconole@bytheb.org> From: Jan Sperber From: Jan Sperber Working with libcxxasn1.so showed memory leakage. After analyzing the esnacc-ng sources we have seen several deletes have not been used correctly (helper tool cppcheck) and found that asn-int.cpp didn't deleted the allocated buffer at all. After further review I think there is no need to keep that buffer in memory so I added the delete statement at the end of the function Reported-at: https://github.com/esnacc/esnacc-ng/pull/49 Fixes: f245889884a7 ("cxx/asn-int: fix integer encoding/decoding") Fixes: dce1e2a48583 ("Starting with eSnacc 1.7 as a base") Signed-off-by: Jan Sperber Signed-off-by: Aaron Conole --- X-post from github. cxx-lib/src/asn-int.cpp | 1 + cxx-lib/src/tcl-if.cpp | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/cxx-lib/src/asn-int.cpp b/cxx-lib/src/asn-int.cpp index 25fbe3b..3d303ab 100644 --- a/cxx-lib/src/asn-int.cpp +++ b/cxx-lib/src/asn-int.cpp @@ -130,6 +130,7 @@ void AsnInt::BDecContent (const AsnBuf &b, AsnTag, AsnLen elmtLen, } storeDERInteger(bytes, elmtLen, !isNeg); + delete[] bytes; } AsnInt::AsnInt (const AsnInt &that) diff --git a/cxx-lib/src/tcl-if.cpp b/cxx-lib/src/tcl-if.cpp index 73c71e6..0161e67 100644 --- a/cxx-lib/src/tcl-if.cpp +++ b/cxx-lib/src/tcl-if.cpp @@ -157,7 +157,7 @@ int ASN1File::read (Tcl_Interp *interp, const char *rfn) if (::read (rfd, buf, filesize) != filesize) { Tcl_AppendResult (interp, "can't read \"", rfn, "\": ", Tcl_PosixError (interp), NULL); - delete buf; + delete[] buf; return TCL_ERROR; } @@ -173,7 +173,7 @@ int ASN1File::read (Tcl_Interp *interp, const char *rfn) sprintf (eno, "%d", eval); Tcl_AppendResult (interp, "can't decode (error ", eno, ")", NULL); Tcl_SetErrorCode (interp, "SNACC", "DECODE", eno, NULL); - delete buf; + delete[] buf; return TCL_ERROR; } pdu->BDec (inputBuf, decodedLen, env); @@ -181,7 +181,7 @@ int ASN1File::read (Tcl_Interp *interp, const char *rfn) { Tcl_AppendResult (interp, "can't decode, out of data", NULL); Tcl_SetErrorCode (interp, "SNACC", "DECODE", "EOBUF", NULL); - delete buf; + delete[] buf; return TCL_ERROR; } @@ -192,7 +192,7 @@ cout << "DECODED:" << endl << *pdu << endl; if (decodedLen != filesize) sprintf (interp->result, "decoded %d of %d bytes", decodedLen, filesize); - delete buf; + delete[] buf; return TCL_OK; } @@ -250,7 +250,7 @@ int ASN1File::write (Tcl_Interp *interp, const char *wfn) encodedLen = pdu->BEnc (outputBuf); if (!outputBuf.WriteError()) break; - delete buf; + delete[] buf; } outputBuf.ResetInReadMode(); @@ -264,14 +264,14 @@ int ASN1File::write (Tcl_Interp *interp, const char *wfn) if (::write (wfd, hunk, hunklen) != hunklen) { Tcl_AppendResult (interp, "write error on \"", wfn, "\": ", Tcl_PosixError (interp), NULL); - delete hunk; // may affect errno - delete buf; // may affect errno + delete[] hunk; // may affect errno + delete[] buf; // may affect errno return TCL_ERROR; } } - delete hunk; - delete buf; + delete[] hunk; + delete[] buf; filesize = encodedLen; if (!wfn) @@ -311,12 +311,12 @@ int import (Tcl_Interp *interp, int argc, char **argv) if (::read (fd, ibuf, filesize) != filesize) { Tcl_AppendResult (interp, "read error on \"", fn, "\": ", Tcl_PosixError (interp), NULL); - delete ibuf; + delete[] ibuf; return TCL_ERROR; } int result = debinify (interp, ibuf, filesize); - delete ibuf; + delete[] ibuf; return result; } -- 2.21.0 From aconole at redhat.com Mon Jun 24 13:03:59 2019 From: aconole at redhat.com (Aaron Conole) Date: Mon, 24 Jun 2019 09:03:59 -0400 Subject: [esnacc-dev] [PATCH] cxx-lib/src: corrected usage of 'delete' causing uncleared memory. In-Reply-To: <20190624125929.8927-1-aconole@bytheb.org> (Aaron Conole's message of "Mon, 24 Jun 2019 08:59:29 -0400") References: <20190624125929.8927-1-aconole@bytheb.org> Message-ID: Aaron Conole writes: > From: Jan Sperber > > From: Jan Sperber > > Working with libcxxasn1.so showed memory leakage. After analyzing the > esnacc-ng sources we have seen several deletes have not been used > correctly (helper tool cppcheck) and found that asn-int.cpp didn't > deleted the allocated buffer at all. After further review I think there > is no need to keep that buffer in memory so I added the delete statement > at the end of the function > > Reported-at: https://github.com/esnacc/esnacc-ng/pull/49 > Fixes: f245889884a7 ("cxx/asn-int: fix integer encoding/decoding") > Fixes: dce1e2a48583 ("Starting with eSnacc 1.7 as a base") > Signed-off-by: Jan Sperber > Signed-off-by: Aaron Conole > --- This patch is mostly fine for me. I plan to make the following changes on apply: s/delete[]/delete []/ Also, I plan to add a change to AUTHORS to add Jan. Thanks for your contribution! -Aaron