ソースを参照

Fix memoryleak in session services

Mark 6 年 前
コミット
0c55867ebb
共有1 個のファイルを変更した3 個の追加0 個の削除を含む
  1. 3 0
      src/server/ua_services_session.c

+ 3 - 0
src/server/ua_services_session.c

@@ -23,6 +23,7 @@ nonceAndSignCreateSessionResponse(UA_Server *server, UA_SecureChannel *channel,
     /* Generate Nonce
      * FIXME: remove magic number??? */
     UA_StatusCode retval = UA_SecureChannel_generateNonce(channel, 32, &response->serverNonce);
+    UA_ByteString_deleteMembers(&session->serverNonce);
     retval |= UA_ByteString_copy(&response->serverNonce, &session->serverNonce);
     if(retval != UA_STATUSCODE_GOOD) {
         UA_SessionManager_removeSession(&server->sessionManager, &session->authenticationToken);
@@ -187,6 +188,7 @@ checkSignature(const UA_Server *server,
         UA_ByteString dataToVerify;
         UA_StatusCode retval = UA_ByteString_allocBuffer(&dataToVerify,
                                                          localCertificate->length + session->serverNonce.length);
+
         if(retval != UA_STATUSCODE_GOOD) {
             response->responseHeader.serviceResult = retval;
             UA_LOG_DEBUG_SESSION(server->config.logger, session,
@@ -210,6 +212,7 @@ checkSignature(const UA_Server *server,
         }
 
         retval  = UA_SecureChannel_generateNonce(channel, 32, &response->serverNonce);
+        UA_ByteString_deleteMembers(&session->serverNonce);
         retval |= UA_ByteString_copy(&response->serverNonce, &session->serverNonce);
         if(retval != UA_STATUSCODE_GOOD) {
             response->responseHeader.serviceResult = retval;