瀏覽代碼

Fixed possible use of NULL pointer

Mattias Bornhager 7 年之前
父節點
當前提交
f2212ae04e
共有 3 個文件被更改,包括 12 次插入4 次删除
  1. 6 1
      src/server/ua_services_subscription.c
  2. 5 2
      src/server/ua_subscription.c
  3. 1 1
      src/server/ua_subscription.h

+ 6 - 1
src/server/ua_services_subscription.c

@@ -443,7 +443,12 @@ Service_Publish(UA_Server *server, UA_Session *session,
      * oldest publish request shall be responded */
      * oldest publish request shall be responded */
     if((server->config.maxPublishReqPerSession != 0 ) &&
     if((server->config.maxPublishReqPerSession != 0 ) &&
        (UA_Session_getNumPublishReq(session) >= server->config.maxPublishReqPerSession)){
        (UA_Session_getNumPublishReq(session) >= server->config.maxPublishReqPerSession)){
-       UA_Subscription_reachedPublishReqLimit( server,session);
+        if(!UA_Subscription_reachedPublishReqLimit(server,session)) {
+            subscriptionSendError(session->channel, requestId,
+                                  request->requestHeader.requestHandle,
+                                  UA_STATUSCODE_BADINTERNALERROR);
+            return;
+        }
     }
     }
 
 
     UA_PublishResponseEntry *entry =
     UA_PublishResponseEntry *entry =

+ 5 - 2
src/server/ua_subscription.c

@@ -380,7 +380,7 @@ UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub) {
     }
     }
 }
 }
 
 
-void
+UA_Boolean
 UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session) {
 UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session) {
     UA_LOG_DEBUG_SESSION(server->config.logger, session,
     UA_LOG_DEBUG_SESSION(server->config.logger, session,
                          "Reached number of publish request limit");
                          "Reached number of publish request limit");
@@ -391,7 +391,8 @@ UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session)
 
 
     /* Cannot publish without a response */
     /* Cannot publish without a response */
     if(!pre) {
     if(!pre) {
-       UA_LOG_FATAL_SESSION(server->config.logger, session, "No publish requests available");
+        UA_LOG_FATAL_SESSION(server->config.logger, session, "No publish requests available");
+        return false;
     }
     }
 
 
     UA_PublishResponse *response = &pre->response;
     UA_PublishResponse *response = &pre->response;
@@ -422,6 +423,8 @@ UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session)
     UA_Array_delete(response->results, response->resultsSize,
     UA_Array_delete(response->results, response->resultsSize,
                     &UA_TYPES[UA_TYPES_UINT32]);
                     &UA_TYPES[UA_TYPES_UINT32]);
     UA_free(pre); /* no need for UA_PublishResponse_deleteMembers */
     UA_free(pre); /* no need for UA_PublishResponse_deleteMembers */
+
+    return true;
 }
 }
 
 
 UA_StatusCode
 UA_StatusCode

+ 1 - 1
src/server/ua_subscription.h

@@ -145,6 +145,6 @@ UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequ
 void
 void
 UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_Session *session);
 UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_Session *session);
 
 
-void
+UA_Boolean
 UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session);
 UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session);
 #endif /* UA_SUBSCRIPTION_H_ */
 #endif /* UA_SUBSCRIPTION_H_ */