Browse Source

Fixed possible use of NULL pointer

Mattias Bornhager 7 years ago
parent
commit
f2212ae04e

+ 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 */
     if((server->config.maxPublishReqPerSession != 0 ) &&
        (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 =

+ 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_LOG_DEBUG_SESSION(server->config.logger, session,
                          "Reached number of publish request limit");
@@ -391,7 +391,8 @@ UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session)
 
     /* Cannot publish without a response */
     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;
@@ -422,6 +423,8 @@ UA_Subscription_reachedPublishReqLimit(UA_Server *server,  UA_Session *session)
     UA_Array_delete(response->results, response->resultsSize,
                     &UA_TYPES[UA_TYPES_UINT32]);
     UA_free(pre); /* no need for UA_PublishResponse_deleteMembers */
+
+    return true;
 }
 
 UA_StatusCode

+ 1 - 1
src/server/ua_subscription.h

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