fix memory leak in SECoP protocol
This commit is contained in:
@ -113,7 +113,7 @@ int Secop3ProtHandler(Ascon *a) {
|
|||||||
ret = Secop3ReadChars(a->fd, buffer, sizeof buffer - 1);
|
ret = Secop3ReadChars(a->fd, buffer, sizeof buffer - 1);
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
AsconError(a, "SECOP.1", errno);
|
AsconError(a, "SECoP.rd", errno);
|
||||||
}
|
}
|
||||||
switch (a->state) {
|
switch (a->state) {
|
||||||
case AsconWriting:
|
case AsconWriting:
|
||||||
@ -121,7 +121,7 @@ int Secop3ProtHandler(Ascon *a) {
|
|||||||
l = GetDynStringLength(a->wrBuffer) - a->wrPos;
|
l = GetDynStringLength(a->wrBuffer) - a->wrPos;
|
||||||
ret = AsconWriteChars(a->fd, GetCharArray(a->wrBuffer) + a->wrPos, l);
|
ret = AsconWriteChars(a->fd, GetCharArray(a->wrBuffer) + a->wrPos, l);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
AsconError(a, "SECOP.2", errno); /* sets state to AsconFailed */
|
AsconError(a, "SECoP.wr", errno); /* sets state to AsconFailed */
|
||||||
} else {
|
} else {
|
||||||
a->wrPos += ret;
|
a->wrPos += ret;
|
||||||
if (a->wrPos >= GetDynStringLength(a->wrBuffer)) {
|
if (a->wrPos >= GetDynStringLength(a->wrBuffer)) {
|
||||||
@ -177,6 +177,7 @@ int Secop3ProtHandler(Ascon *a) {
|
|||||||
tclobj = Tcl_NewListObj(2, tcllist);
|
tclobj = Tcl_NewListObj(2, tcllist);
|
||||||
}
|
}
|
||||||
DynStringCopy(a->rdBuffer, Tcl_GetString(tclobj));
|
DynStringCopy(a->rdBuffer, Tcl_GetString(tclobj));
|
||||||
|
Tcl_DecrRefCount(tclobj); /* this line avoids a big memory leak! */
|
||||||
a->responseValid = 1;
|
a->responseValid = 1;
|
||||||
json_object_put(jobj); /* free jobj */
|
json_object_put(jobj); /* free jobj */
|
||||||
free(msg->message);
|
free(msg->message);
|
||||||
|
Reference in New Issue
Block a user