osaf/libs/agents/saf/ntfa/ntfa_api.c   |  380 +++++++++++++++++++-------------
 osaf/libs/agents/saf/ntfa/ntfa_util.c  |   33 ++-
 osaf/libs/common/ntfsv/ntfsv_enc_dec.c |   75 ++++-
 osaf/libs/common/ntfsv/ntfsv_mem.c     |    1 +
 4 files changed, 306 insertions(+), 183 deletions(-)


Currently if any unadapted longDn consumer receives notification having 
extended SaNameT
in notification (notificationObject(s), notifyingObject(s), value type as 
LDAP_NAME)
will be crashed

The crash is due to invalid access to extended SaNameT

The patch makes longDn notification invisible to unadapted consumer. Also if 
unadapted
producer is going to send a longDn notification or unadapted consumer specifies 
longDn
object for filter, the error code SA_AIS_ERR_INVALID_PARAM is returned.
Affected APIs: saNtfNotificationSend, saNtfNotificationReadNext,
saNtfNotificationReadInitialize, saNtfNotificationSubscribe, saNtfPtrValGet, and
notificationCallback.

diff --git a/osaf/libs/agents/saf/ntfa/ntfa_api.c 
b/osaf/libs/agents/saf/ntfa/ntfa_api.c
--- a/osaf/libs/agents/saf/ntfa/ntfa_api.c
+++ b/osaf/libs/agents/saf/ntfa/ntfa_api.c
@@ -39,6 +39,67 @@ ntfa_cb_t ntfa_cb = {
 /* list of subscriptions for this process */
 ntfa_subscriber_list_t *subscriberNoList = NULL;
 
+static SaAisErrorT checkNtfValueTypeRange(SaNtfValueTypeT type)
+{
+       return (type < SA_NTF_VALUE_UINT8 || type > SA_NTF_VALUE_ARRAY)? 
SA_AIS_ERR_INVALID_PARAM
+                                                                               
                                                        : SA_AIS_OK;
+}
+
+static SaAisErrorT checkNtfValue(v_data* pvdata, SaNtfValueTypeT type, 
SaNtfValueT* value)
+{
+       SaAisErrorT rc = SA_AIS_OK;
+       SaNameT *ptr;
+       if ((rc = checkNtfValueTypeRange(type)) != SA_AIS_OK) {
+               TRACE_1("Invalid value type(%d)", type);
+               return rc;
+       }
+       
+       if (type == SA_NTF_VALUE_LDAP_NAME) {
+               /* SaNameT must have length > 2 */
+               if (value->ptrVal.dataSize <= 2)
+                       return SA_AIS_ERR_INVALID_PARAM;
+
+               /* Check SaNameT */
+               ptr = pvdata->p_base + value->ptrVal.dataOffset;
+               if (!ntfsv_sanamet_is_valid(ptr))
+                       return SA_AIS_ERR_INVALID_PARAM;
+
+               /* Refill the extended SaNameT into variable data */
+               if (osaf_is_an_extended_name(ptr)) {
+                       size_t length_to_copy;
+                       void *p;
+                       if (value->ptrVal.dataSize < 
(osaf_extended_name_length(ptr) + 2)) {
+                               LOG_ER("The allocated memory is not large 
enough,"
+                                               " the object will be truncated 
(%s)"
+                                               , 
osaf_extended_name_borrow(ptr));
+                               length_to_copy = value->ptrVal.dataSize - 2;    
        
+                       } else
+                               length_to_copy = osaf_extended_name_length(ptr);
+
+                       p = pvdata->p_base + value->ptrVal.dataOffset + 2;
+                       memcpy(p, osaf_extended_name_borrow(ptr), 
length_to_copy);
+               } else {
+                       if (value->ptrVal.dataSize > 
SA_MAX_UNEXTENDED_NAME_LENGTH + 2)
+                               value->ptrVal.dataSize = 
SA_MAX_UNEXTENDED_NAME_LENGTH + 2;
+               }
+       }
+
+       return rc;
+}
+
+static SaAisErrorT checkFilterHeader(SaNtfNotificationFilterHeaderT *nfh) {
+
+       SaUint16T i;
+       for (i = 0; i != nfh->numNotificationObjects; ++i)
+               if (!ntfsv_sanamet_is_valid(&nfh->notificationObjects[i]))
+                       return SA_AIS_ERR_INVALID_PARAM;
+       for (i = 0; i != nfh->numNotifyingObjects; ++i)
+               if (!ntfsv_sanamet_is_valid(&nfh->notifyingObjects[i]))
+                       return SA_AIS_ERR_INVALID_PARAM;
+
+       return SA_AIS_OK;
+}
+
 static SaAisErrorT checkAttributeChangeFilterParameters(ntfa_filter_hdl_rec_t 
*attributeChangeFilterData)
 {
        SaUint16T i;
@@ -72,8 +133,8 @@ static SaAisErrorT checkAttributeChangeF
                }
        }
 
-       TRACE_1("Returning SA_AIS_OK!");
-       return SA_AIS_OK;
+       return checkFilterHeader(&attributeChangeFilterData->notificationFilter.
+                                                               
attributeChangeNotificationfilter.notificationFilterHeader);
 
 }
 
@@ -111,8 +172,8 @@ static SaAisErrorT checkObjectCreateDele
                }
        }
 
-       TRACE_1("Returning SA_AIS_OK!");
-       return SA_AIS_OK;
+       return 
checkFilterHeader(&objectCreateDeleteFilterData->notificationFilter.
+                                                               
objectCreateDeleteNotificationfilter.notificationFilterHeader);
 
 }
 
@@ -155,9 +216,8 @@ static SaAisErrorT checkStateChangeFilte
                        return SA_AIS_ERR_INVALID_PARAM;
                }
        }
-
-       TRACE_1("Returning SA_AIS_OK!");
-       return SA_AIS_OK;
+       return checkFilterHeader(&stateChangeFilterData->notificationFilter.
+                                                               
stateChangeNotificationfilter.notificationFilterHeader);
 }
 
 static SaAisErrorT checkAlarmFilterParameters(ntfa_filter_hdl_rec_t 
*alarmFilterData)
@@ -209,8 +269,8 @@ static SaAisErrorT checkAlarmFilterParam
                }
        }
 
-       TRACE_1("Returning SA_AIS_OK!");
-       return SA_AIS_OK;
+       return checkFilterHeader(&alarmFilterData->notificationFilter.
+                                                               
alarmNotificationfilter.notificationFilterHeader);
 }
 
 static SaAisErrorT checkSecurityAlarmFilterParameters(ntfa_filter_hdl_rec_t 
*securityAlarmFilterData)
@@ -260,11 +320,9 @@ static SaAisErrorT checkSecurityAlarmFil
        for (i = 0;
             i < 
securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.numSecurityAlarmDetectors;
             i++) {
-               if 
(securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
-                   securityAlarmDetectors[i].valueType < SA_NTF_VALUE_UINT8
-                   || 
securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
-                   securityAlarmDetectors[i].valueType > SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid PercievedSeverity value = %d",
+               if 
(checkNtfValueTypeRange(securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
+                                                                       
securityAlarmDetectors[i].valueType) != SA_AIS_OK) {
+                       TRACE_1("Invalid securityAlarmDetectors value type = 
%d",
                                
(int)securityAlarmFilterData->notificationFilter.
                                
securityAlarmNotificationfilter.securityAlarmDetectors[i].valueType);
                        return SA_AIS_ERR_INVALID_PARAM;
@@ -273,11 +331,9 @@ static SaAisErrorT checkSecurityAlarmFil
 
        for (i = 0; i < 
securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.numServiceUsers;
             i++) {
-               if 
(securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
-                   serviceUsers[i].valueType < SA_NTF_VALUE_UINT8
-                   || 
securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
-                   serviceUsers[i].valueType > SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid PercievedSeverity value = %d",
+               if 
(checkNtfValueTypeRange(securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
+                                                                       
serviceUsers[i].valueType) != SA_AIS_OK) {
+                       TRACE_1("Invalid serviceUsers value type = %d",
                                
(int)securityAlarmFilterData->notificationFilter.
                                
securityAlarmNotificationfilter.serviceUsers[i].valueType);
                        return SA_AIS_ERR_INVALID_PARAM;
@@ -286,26 +342,24 @@ static SaAisErrorT checkSecurityAlarmFil
 
        for (i = 0; i < 
securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.numServiceProviders;
             i++) {
-               if 
(securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
-                   serviceProviders[i].valueType < SA_NTF_VALUE_UINT8
-                   || 
securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
-                   serviceProviders[i].valueType > SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid PercievedSeverity value = %d",
+               if 
(checkNtfValueTypeRange(securityAlarmFilterData->notificationFilter.securityAlarmNotificationfilter.
+                                                                       
serviceProviders[i].valueType) != SA_AIS_OK) {
+                       TRACE_1("Invalid serviceProviders value type = %d",
                                
(int)securityAlarmFilterData->notificationFilter.
                                
securityAlarmNotificationfilter.serviceProviders[i].valueType);
                        return SA_AIS_ERR_INVALID_PARAM;
                }
        }
 
-       TRACE_1("Returning SA_AIS_OK!");
-       return SA_AIS_OK;
+       return checkFilterHeader(&securityAlarmFilterData->notificationFilter.
+                                                               
securityAlarmNotificationfilter.notificationFilterHeader);
 }
 
 /* help functions */
-static SaAisErrorT checkHeader(SaNtfNotificationHeaderT *nh)
+static SaAisErrorT checkHeader(v_data *pvdata, SaNtfNotificationHeaderT *nh)
 {
        int i =0;
-
+       SaAisErrorT rc;
        if (!ntfsv_sanamet_is_valid(nh->notificationObject) ||
                !ntfsv_sanamet_is_valid(nh->notifyingObject)) {
                TRACE_1("SaNameT is invaild");
@@ -313,80 +367,81 @@ static SaAisErrorT checkHeader(SaNtfNoti
        }
 
        for(i=0 ; i < nh->numAdditionalInfo ; i++ ) {
-               if(nh->additionalInfo[i].infoType < SA_NTF_VALUE_UINT8 || 
-                       nh->additionalInfo[i].infoType > SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid numAdditionalInfo type value");
+               if ((rc = checkNtfValue(pvdata, 
+                                                               
nh->additionalInfo[i].infoType, 
+                                                               
&nh->additionalInfo[i].infoValue)) != SA_AIS_OK)
+                       return rc;
+       }
+
+       return SA_AIS_OK;
+}
+
+static SaAisErrorT checkAlarmParameters(ntfa_notification_hdl_rec_t 
*not_hdl_rec, v_data *pvdata)
+{
+       int i = 0;
+       SaNtfAlarmNotificationT *notification = 
&not_hdl_rec->ntfNotification.ntfAlarmNotification;
+       if (*notification->probableCause < SA_NTF_ADAPTER_ERROR ||
+           *notification->probableCause > SA_NTF_UNSPECIFIED_REASON) {
+               TRACE_1("Invalid probableCause value");
+               return SA_AIS_ERR_INVALID_PARAM;
+       }
+
+       if (*notification->perceivedSeverity < SA_NTF_SEVERITY_CLEARED ||
+           *notification->perceivedSeverity > SA_NTF_SEVERITY_CRITICAL) {
+               TRACE_1("Invalid perceivedSeverity value");
+               return SA_AIS_ERR_INVALID_PARAM;
+       }
+
+       if (*notification->trend < SA_NTF_TREND_MORE_SEVERE ||
+           *notification->trend > SA_NTF_TREND_LESS_SEVERE) {
+               TRACE_1("Invalid trend value");
+               return SA_AIS_ERR_INVALID_PARAM;
+       }
+
+       for (i = 0; i < notification->numSpecificProblems; i++) {
+               if (checkNtfValue(pvdata
+                                                       , 
notification->specificProblems[i].problemType
+                                                       , 
&notification->specificProblems[i].problemValue) != SA_AIS_OK) {
+                       TRACE_1("Invalid specificProblems");
                        return SA_AIS_ERR_INVALID_PARAM;
                }
        }
 
-       return SA_AIS_OK;
-}
-
-static SaAisErrorT checkAlarmParameters(SaNtfAlarmNotificationT 
*alarmNotification)
-{
-       int i = 0;
-
-       if (*alarmNotification->probableCause < SA_NTF_ADAPTER_ERROR ||
-           *alarmNotification->probableCause > SA_NTF_UNSPECIFIED_REASON) {
-               TRACE_1("Invalid probableCause value");
-               return SA_AIS_ERR_INVALID_PARAM;
+       for (i = 0; i < notification->numMonitoredAttributes; i++) {
+               if (checkNtfValue(pvdata
+                                                       , 
notification->monitoredAttributes[i].attributeType
+                                                       , 
&notification->monitoredAttributes[i].attributeValue) != SA_AIS_OK) {
+                       TRACE_1("Invalid monitoredAttributes");
+                       return SA_AIS_ERR_INVALID_PARAM;
+               }       
        }
 
-       if (*alarmNotification->perceivedSeverity < SA_NTF_SEVERITY_CLEARED ||
-           *alarmNotification->perceivedSeverity > SA_NTF_SEVERITY_CRITICAL) {
-               TRACE_1("Invalid perceivedSeverity value");
-               return SA_AIS_ERR_INVALID_PARAM;
+       for (i = 0; i < notification->numProposedRepairActions; i++) {
+               if (checkNtfValue(pvdata
+                                                       , 
notification->proposedRepairActions[i].actionValueType
+                                                       , 
&notification->proposedRepairActions[i].actionValue) != SA_AIS_OK) {
+                       TRACE_1("Invalid proposedRepairActions");
+                       return SA_AIS_ERR_INVALID_PARAM;
+               }       
        }
 
-       if (*alarmNotification->trend < SA_NTF_TREND_MORE_SEVERE ||
-           *alarmNotification->trend > SA_NTF_TREND_LESS_SEVERE) {
-               TRACE_1("Invalid trend value");
-               return SA_AIS_ERR_INVALID_PARAM;
-       }
-
-       for (i = 0; i < alarmNotification->numSpecificProblems; i++) {
-               if (alarmNotification->specificProblems[i].problemType < 
SA_NTF_VALUE_UINT8 ||
-                   alarmNotification->specificProblems[i].problemType > 
SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid specific problem type value");
-                       return SA_AIS_ERR_INVALID_PARAM;
-               }
-       }
-
-       for (i = 0; i < alarmNotification->numMonitoredAttributes; i++) {
-               if (alarmNotification->monitoredAttributes[i].attributeType < 
SA_NTF_VALUE_UINT8 ||
-                   alarmNotification->monitoredAttributes[i].attributeType > 
SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid monitoredAttributes type value");
-                       return SA_AIS_ERR_INVALID_PARAM;
-               }
-       }
-
-       for (i = 0; i < alarmNotification->numProposedRepairActions; i++) {
-               if (alarmNotification->proposedRepairActions[i].actionValueType 
< SA_NTF_VALUE_UINT8 ||
-                   alarmNotification->proposedRepairActions[i].actionValueType 
> SA_NTF_VALUE_ARRAY) {
-                       TRACE_1("Invalid proposedRepairActions type value");
-                       return SA_AIS_ERR_INVALID_PARAM;
-               }
-       }
-
-       if(alarmNotification->thresholdInformation->thresholdValueType < 
SA_NTF_VALUE_UINT8 ||
-               alarmNotification->thresholdInformation->thresholdValueType > 
SA_NTF_VALUE_ARRAY) {
+       
if(checkNtfValueTypeRange(notification->thresholdInformation->thresholdValueType)
 != SA_AIS_OK) {
                TRACE_1("Invalid thresholdInformation type value");
                return SA_AIS_ERR_INVALID_PARAM;
        }
 
-       if (*alarmNotification->notificationHeader.eventType < 
SA_NTF_ALARM_NOTIFICATIONS_START ||
-           *alarmNotification->notificationHeader.eventType > 
SA_NTF_ALARM_ENVIRONMENT) {
-               TRACE_1("Invalid eventType value = %d", 
(int)*alarmNotification->notificationHeader.eventType);
+       if (*notification->notificationHeader.eventType < 
SA_NTF_ALARM_NOTIFICATIONS_START ||
+           *notification->notificationHeader.eventType > 
SA_NTF_ALARM_ENVIRONMENT) {
+               TRACE_1("Invalid eventType value = %d", 
(int)*notification->notificationHeader.eventType);
                return SA_AIS_ERR_INVALID_PARAM;
        }
 
-       return checkHeader(&alarmNotification->notificationHeader);
+       return checkHeader(pvdata, &notification->notificationHeader);
 }
 
-static SaAisErrorT 
checkSecurityAlarmParameters(SaNtfSecurityAlarmNotificationT *notification)
+static SaAisErrorT checkSecurityAlarmParameters(ntfa_notification_hdl_rec_t 
*not_hdl_rec, v_data *pvdata)
 {
-
+       SaNtfSecurityAlarmNotificationT *notification = 
&not_hdl_rec->ntfNotification.ntfSecurityAlarmNotification;
        if (*notification->notificationHeader.eventType < 
SA_NTF_SECURITY_ALARM_NOTIFICATIONS_START ||
            *notification->notificationHeader.eventType > 
SA_NTF_TIME_VIOLATION) {
                TRACE_1("Invalid eventType value");
@@ -399,23 +454,39 @@ static SaAisErrorT checkSecurityAlarmPar
                return SA_AIS_ERR_INVALID_PARAM;
        }
 
-       if (notification->securityAlarmDetector->valueType < SA_NTF_VALUE_UINT8 
||
-           notification->securityAlarmDetector->valueType > 
SA_NTF_VALUE_ARRAY) {
-               TRACE_1("Invalid securityAlarmDetector valueType");
+       if (checkNtfValue(pvdata
+                                               , 
notification->securityAlarmDetector->valueType
+                                               , 
&notification->securityAlarmDetector->value) != SA_AIS_OK) {
+               TRACE_1("Invalid securityAlarmDetector");
                return SA_AIS_ERR_INVALID_PARAM;
        }
        
+       if (checkNtfValue(pvdata
+                                               , 
notification->serviceUser->valueType
+                                               , 
&notification->serviceUser->value) != SA_AIS_OK) {
+               TRACE_1("Invalid serviceUser");
+               return SA_AIS_ERR_INVALID_PARAM;
+       }
+
+       if (checkNtfValue(pvdata
+                                               , 
notification->serviceProvider->valueType
+                                               , 
&notification->serviceProvider->value) != SA_AIS_OK) {
+               TRACE_1("Invalid serviceProvider");
+               return SA_AIS_ERR_INVALID_PARAM;
+       }       
+       
        if (*notification->severity < SA_NTF_SEVERITY_CLEARED || 
*notification->severity > SA_NTF_SEVERITY_CRITICAL) {
                TRACE_1("Invalid Severity value");
                return SA_AIS_ERR_INVALID_PARAM;
        }
 
-       return checkHeader(&notification->notificationHeader);
+       return checkHeader(pvdata, &notification->notificationHeader);
 }
 
-static SaAisErrorT checkStateChangeParameters(SaNtfStateChangeNotificationT 
*notification)
+static SaAisErrorT checkStateChangeParameters(ntfa_notification_hdl_rec_t 
*not_hdl_rec, v_data *pvdata)
 {
        int i;
+       SaNtfStateChangeNotificationT *notification = 
&not_hdl_rec->ntfNotification.ntfStateChangeNotification;
        if (*notification->notificationHeader.eventType < 
SA_NTF_STATE_CHANGE_NOTIFICATIONS_START ||
            (*notification->notificationHeader.eventType > 
SA_NTF_OBJECT_STATE_CHANGE &&
             *notification->notificationHeader.eventType < 
SA_NTF_MISCELLANEOUS_NOTIFICATIONS_START) ||
@@ -435,12 +506,13 @@ static SaAisErrorT checkStateChangeParam
                if (sp != SA_FALSE && sp != SA_TRUE)
                        return SA_AIS_ERR_INVALID_PARAM;
        }
-       return checkHeader(&notification->notificationHeader);
+       return checkHeader(pvdata, &notification->notificationHeader);
 }
 
-static SaAisErrorT 
checkAttributeChangeParameters(SaNtfAttributeChangeNotificationT *notification)
+static SaAisErrorT checkAttributeChangeParameters(ntfa_notification_hdl_rec_t 
*not_hdl_rec, v_data *pvdata)
 {
        int i;
+       SaNtfAttributeChangeNotificationT *notification = 
&not_hdl_rec->ntfNotification.ntfAttributeChangeNotification;
        if (*notification->notificationHeader.eventType < 
SA_NTF_ATTRIBUTE_NOTIFICATIONS_START ||
            *notification->notificationHeader.eventType > 
SA_NTF_ATTRIBUTE_RESET) {
                TRACE_1("Invalid eventType value");
@@ -457,18 +529,17 @@ static SaAisErrorT checkAttributeChangeP
                SaBoolT sp = 
notification->changedAttributes[i].oldAttributePresent;
                if (sp != SA_FALSE && sp != SA_TRUE)
                        return SA_AIS_ERR_INVALID_PARAM;
-               if(notification->changedAttributes[i].attributeType < 
SA_NTF_VALUE_UINT8 ||
-                  notification->changedAttributes[i].attributeType > 
SA_NTF_VALUE_ARRAY)
+               
if(checkNtfValueTypeRange(notification->changedAttributes[i].attributeType) != 
SA_AIS_OK)
                        return SA_AIS_ERR_INVALID_PARAM;
        }
-       return checkHeader(&notification->notificationHeader);
+       return checkHeader(pvdata, &notification->notificationHeader);
 }
 
-static SaAisErrorT 
checkObjectCreateDeleteParameters(SaNtfObjectCreateDeleteNotificationT 
*notification)
+static SaAisErrorT 
checkObjectCreateDeleteParameters(ntfa_notification_hdl_rec_t *not_hdl_rec, 
v_data *pvdata)
 {
 
        int i = 0;
-
+       SaNtfObjectCreateDeleteNotificationT *notification = 
&not_hdl_rec->ntfNotification.ntfObjectCreateDeleteNotification;
        if (*notification->notificationHeader.eventType < 
SA_NTF_OBJECT_NOTIFICATIONS_START ||
            *notification->notificationHeader.eventType > 
SA_NTF_OBJECT_DELETION) {
                TRACE_1("Invalid eventType value");
@@ -482,14 +553,13 @@ static SaAisErrorT checkObjectCreateDele
        }
 
        for (i = 0; i < notification->numAttributes; i++) {
-               if (notification->objectAttributes[i].attributeType < 
SA_NTF_VALUE_UINT8 ||
-                   notification->objectAttributes[i].attributeType > 
SA_NTF_VALUE_ARRAY) {
+               if 
(checkNtfValueTypeRange(notification->objectAttributes[i].attributeType) != 
SA_AIS_OK) {
                        TRACE_1("Invalid attributeType value");
                        return SA_AIS_ERR_INVALID_PARAM;
                }
        }
 
-       return checkHeader(&notification->notificationHeader);
+       return checkHeader(pvdata, &notification->notificationHeader);
 }
 
 /**
@@ -1228,7 +1298,8 @@ SaAisErrorT saNtfNotificationSend(SaNtfN
        msg.info.api_info.param.send_notification = send_param;
        send_param->client_id = client_rec->ntfs_client_id;
        send_param->notificationType = 
notification_hdl_rec->ntfNotificationType;
-
+       ntfsv_v_data_cp(&send_param->variable_data, 
&notification_hdl_rec->variable_data);      
+       
        osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) == 0);
        /* Check parameters, depending on type */
        switch (notification_hdl_rec->ntfNotificationType) {
@@ -1237,36 +1308,34 @@ SaAisErrorT saNtfNotificationSend(SaNtfN
                /* TODO: assign send_param for all */
                send_param->notification.alarm = 
notification_hdl_rec->ntfNotification.ntfAlarmNotification;
                ntfHeader = 
&notification_hdl_rec->ntfNotification.ntfAlarmNotification.notificationHeader;
-               rc = 
checkAlarmParameters(&notification_hdl_rec->ntfNotification.ntfAlarmNotification);
+               rc = checkAlarmParameters(notification_hdl_rec, 
&send_param->variable_data);
                break;
        case SA_NTF_TYPE_SECURITY_ALARM:
                TRACE_1("Checking Security Alarm Notification Parameters");
                send_param->notification.securityAlarm =
                    
notification_hdl_rec->ntfNotification.ntfSecurityAlarmNotification;
                ntfHeader = 
&notification_hdl_rec->ntfNotification.ntfSecurityAlarmNotification.notificationHeader;
-               rc = 
checkSecurityAlarmParameters(&notification_hdl_rec->ntfNotification.ntfSecurityAlarmNotification);
+               rc = checkSecurityAlarmParameters(notification_hdl_rec, 
&send_param->variable_data);
                break;
        case SA_NTF_TYPE_STATE_CHANGE:
                TRACE_1("Checking State Change Notification Parameters");
                send_param->notification.stateChange = 
notification_hdl_rec->ntfNotification.ntfStateChangeNotification;
                ntfHeader = 
&notification_hdl_rec->ntfNotification.ntfStateChangeNotification.notificationHeader;
-               rc = 
checkStateChangeParameters(&notification_hdl_rec->ntfNotification.ntfStateChangeNotification);
+               rc = checkStateChangeParameters(notification_hdl_rec, 
&send_param->variable_data);
                break;
        case SA_NTF_TYPE_ATTRIBUTE_CHANGE:
                TRACE_1("Checking Attribute Change Notification Parameters");
                send_param->notification.attributeChange =
                    
notification_hdl_rec->ntfNotification.ntfAttributeChangeNotification;
                ntfHeader = 
&notification_hdl_rec->ntfNotification.ntfAttributeChangeNotification.notificationHeader;
-               rc = 
checkAttributeChangeParameters(&notification_hdl_rec->ntfNotification.
-                                                   
ntfAttributeChangeNotification);
+               rc = checkAttributeChangeParameters(notification_hdl_rec, 
&send_param->variable_data);
                break;
        case SA_NTF_TYPE_OBJECT_CREATE_DELETE:
                TRACE_1("Checking Object Create/Delete Notification 
Parameters");
                send_param->notification.objectCreateDelete =
                    
notification_hdl_rec->ntfNotification.ntfObjectCreateDeleteNotification;
                ntfHeader = 
&notification_hdl_rec->ntfNotification.ntfObjectCreateDeleteNotification.notificationHeader;
-               rc = 
checkObjectCreateDeleteParameters(&notification_hdl_rec->ntfNotification.
-                                                      
ntfObjectCreateDeleteNotification);
+               rc = checkObjectCreateDeleteParameters(notification_hdl_rec, 
&send_param->variable_data);
                break;
        default:
                TRACE_1("Unkown notification type");
@@ -1278,7 +1347,6 @@ SaAisErrorT saNtfNotificationSend(SaNtfN
                TRACE_1("Invalid parameter");
                goto done_give_hdls;
        }
-
        rc = fillSendStruct(ntfHeader, send_param);
        if (rc != SA_AIS_OK) {
                goto done_give_hdls;
@@ -1290,33 +1358,7 @@ SaAisErrorT saNtfNotificationSend(SaNtfN
                rc = SA_AIS_ERR_TRY_AGAIN;
                goto done_give_hdls;
        }
-       send_param->variable_data = notification_hdl_rec->variable_data;
-       SaUint16T i = 0;
-       for(i=0 ; i < ntfHeader->numAdditionalInfo ; i++ ) {
-               if (ntfHeader->additionalInfo[i].infoType == 
SA_NTF_VALUE_LDAP_NAME) {
-                       SaNameT *ptr = send_param->variable_data.p_base +
-                                                       
ntfHeader->additionalInfo[i].infoValue.ptrVal.dataOffset;
-                       if (!ntfsv_sanamet_is_valid(ptr)) {
-                               rc = SA_AIS_ERR_INVALID_PARAM;
-                               goto done_give_hdls;
-                       }
-                       if (osaf_is_an_extended_name(ptr)) {
-                               size_t length_to_copy;
-                               void *p;
-                               if 
(ntfHeader->additionalInfo[i].infoValue.ptrVal.dataSize
-                                               < 
(osaf_extended_name_length(ptr) + 2)) {
-                                       LOG_ER("The allocated memory is not 
large enough,"
-                                                       " the object will be 
truncated (%s)"
-                                                       , 
osaf_extended_name_borrow(ptr));
-                                       length_to_copy = 
ntfHeader->additionalInfo[i].infoValue.ptrVal.dataSize - 2;
-                               } else
-                                       length_to_copy = 
osaf_extended_name_length(ptr);
-                               p = send_param->variable_data.p_base +
-                                       
ntfHeader->additionalInfo[i].infoValue.ptrVal.dataOffset + 2;
-                               memcpy(p, osaf_extended_name_borrow(ptr), 
length_to_copy);
-                       }
-               }
-       }
+
        osafassert(pthread_mutex_unlock(&ntfa_cb.cb_lock) == 0);
        /* Send a sync MDS message to obtain a notification id */
        mds_rc = ntfa_mds_msg_sync_send(&ntfa_cb, &msg, &o_msg, timeout);
@@ -1392,6 +1434,8 @@ SaAisErrorT saNtfNotificationSend(SaNtfN
  done_give_hdl:
        ncshm_give_hdl(notificationHandle);
  err_free:
+       if (send_param->variable_data.p_base != NULL)
+               free(send_param->variable_data.p_base);
        free(send_param);
  done:
        TRACE_LEAVE();
@@ -2854,7 +2898,7 @@ SaAisErrorT saNtfNotificationReadNext(Sa
        uint32_t timeout = NTFS_WAIT_TIME;
        ntfsv_send_not_req_t *read_not = NULL;
        ntfa_notification_hdl_rec_t *notification_hdl_rec = NULL;
-
+       SaNtfNotificationHeaderT *read_not_header = NULL;
        TRACE_ENTER();
 
        if(searchDirection < SA_NTF_SEARCH_OLDER || searchDirection > 
SA_NTF_SEARCH_YOUNGER) {
@@ -2902,26 +2946,47 @@ SaAisErrorT saNtfNotificationReadNext(Sa
                goto done_give_hdls;
        }
 
-       /* Send a sync MDS message */
-       rc = ntfa_mds_msg_sync_send(&ntfa_cb, &msg, &o_msg, timeout);
-       if (rc != NCSCC_RC_SUCCESS) {
-               rc = SA_AIS_ERR_TRY_AGAIN;
-               goto done_give_hdls;
-       }
-
-       osafassert(o_msg != NULL);
-       if (SA_AIS_OK != o_msg->info.api_resp_info.rc) {
-               rc = o_msg->info.api_resp_info.rc;
-               TRACE("error: response msg rc = %d", rc);
-               goto done_give_hdls;
-       }
-       if (o_msg->info.api_resp_info.type != NTFSV_READ_NEXT_RSP) {
-               TRACE("msg type (%d) failed", 
(int)o_msg->info.api_resp_info.type);
-               rc = SA_AIS_ERR_LIBRARY;
-               goto done_give_hdls;
-       }
-
-       read_not = 
o_msg->info.api_resp_info.param.read_next_rsp.readNotification;
+       do {
+               /* Send a sync MDS message */
+               rc = ntfa_mds_msg_sync_send(&ntfa_cb, &msg, &o_msg, timeout);
+               if (rc != NCSCC_RC_SUCCESS) {
+                       rc = SA_AIS_ERR_TRY_AGAIN;
+                       goto done_give_hdls;
+               }
+
+               osafassert(o_msg != NULL);
+               if (SA_AIS_OK != o_msg->info.api_resp_info.rc) {
+                       rc = o_msg->info.api_resp_info.rc;
+                       TRACE("error: response msg rc = %d", rc);
+                       goto done_give_hdls;
+               }
+               if (o_msg->info.api_resp_info.type != NTFSV_READ_NEXT_RSP) {
+                       TRACE("msg type (%d) failed", 
(int)o_msg->info.api_resp_info.type);
+                       rc = SA_AIS_ERR_LIBRARY;
+                       goto done_give_hdls;
+               }
+
+               read_not = 
o_msg->info.api_resp_info.param.read_next_rsp.readNotification;
+               if (read_not->notificationType == SA_NTF_TYPE_ALARM)
+                       read_not_header = 
&read_not->notification.alarm.notificationHeader;
+               else if (read_not->notificationType == 
SA_NTF_TYPE_SECURITY_ALARM)
+                       read_not_header = 
&read_not->notification.securityAlarm.notificationHeader;
+               else {
+                       TRACE_1("Notification type (%d) is not alarm!", 
(int)read_not->notificationType);
+                       rc = SA_AIS_ERR_NOT_SUPPORTED;
+                       goto done_give_hdls;
+               }
+               
+               /* Skip notification having longDns if this is unadapted 
longDns consumer,
+                * continue reading next. Otherwise, any return code differs 
SA_AIS_OK may stop
+                * the consumer reading then miss out the remaining 
notifications (shortDns)
+                */
+               if 
(!ntfsv_sanamet_is_valid(read_not_header->notificationObject) 
+                       || 
!ntfsv_sanamet_is_valid(read_not_header->notifyingObject)) {
+                       ntfa_msg_destroy(o_msg);
+               } else
+                       break;
+       } while (1);
 
        /* Only alarm supported */
        if (read_not->notificationType == SA_NTF_TYPE_ALARM) {
@@ -2996,9 +3061,6 @@ SaAisErrorT saNtfNotificationReadNext(Sa
                
ntfsv_copy_ntf_security_alarm(&notification->notification.securityAlarmNotification,
                                                
&read_not->notification.securityAlarm);
                osafassert(pthread_mutex_unlock(&ntfa_cb.cb_lock) == 0);
-       } else {
-               TRACE_1("Notification type (%d) is not alarm!", 
(int)read_not->notificationType);
-               rc = SA_AIS_ERR_NOT_SUPPORTED;
        }
 
  done_give_hdls:
diff --git a/osaf/libs/agents/saf/ntfa/ntfa_util.c 
b/osaf/libs/agents/saf/ntfa/ntfa_util.c
--- a/osaf/libs/agents/saf/ntfa/ntfa_util.c
+++ b/osaf/libs/agents/saf/ntfa/ntfa_util.c
@@ -137,10 +137,16 @@ static SaAisErrorT ntfa_alloc_callback_n
        SaAisErrorT rc = SA_AIS_OK;
        ntfa_notification_hdl_rec_t *notification_hdl_rec;
        notification->notificationType = not_cbk->notificationType;
-
+       SaNtfNotificationHeaderT *not_cbk_header;
        switch (not_cbk->notificationType) {
        case SA_NTF_TYPE_OBJECT_CREATE_DELETE:
                TRACE_2("type: SA_NTF_TYPE_OBJECT_CREATE_DELETE");
+               not_cbk_header = 
&not_cbk->notification.objectCreateDelete.notificationHeader;
+               if (!ntfsv_sanamet_is_valid(not_cbk_header->notificationObject) 
+                       || 
!ntfsv_sanamet_is_valid(not_cbk_header->notifyingObject)) {
+                       rc = SA_AIS_ERR_NAME_TOO_LONG;
+                       break;
+               }
                rc = 
saNtfObjectCreateDeleteNotificationAllocate(hdl_rec->local_hdl,
                                                                 
&notification->notification.
                                                                 
objectCreateDeleteNotification,
@@ -175,6 +181,12 @@ static SaAisErrorT ntfa_alloc_callback_n
                break;
        case SA_NTF_TYPE_ATTRIBUTE_CHANGE:
                TRACE_2("type: SA_NTF_TYPE_ATTRIBUTE_CHANGE");
+               not_cbk_header = 
&not_cbk->notification.attributeChange.notificationHeader;
+               if (!ntfsv_sanamet_is_valid(not_cbk_header->notificationObject) 
+                       || 
!ntfsv_sanamet_is_valid(not_cbk_header->notifyingObject)) {
+                       rc = SA_AIS_ERR_NAME_TOO_LONG;
+                       break;
+               }       
                rc = 
saNtfAttributeChangeNotificationAllocate(hdl_rec->local_hdl,
                                                              
&notification->notification.attributeChangeNotification,
                                                              
not_cbk->notification.attributeChange.notificationHeader.
@@ -208,6 +220,12 @@ static SaAisErrorT ntfa_alloc_callback_n
                break;
        case SA_NTF_TYPE_STATE_CHANGE:
                TRACE_2("type: SA_NTF_TYPE_STATE_CHANGE");
+               not_cbk_header = 
&not_cbk->notification.stateChange.notificationHeader;
+               if (!ntfsv_sanamet_is_valid(not_cbk_header->notificationObject) 
+                       || 
!ntfsv_sanamet_is_valid(not_cbk_header->notifyingObject)) {
+                       rc = SA_AIS_ERR_NAME_TOO_LONG;
+                       break;
+               }       
                rc = saNtfStateChangeNotificationAllocate(hdl_rec->local_hdl,
                                                          
&notification->notification.stateChangeNotification,
                                                          
not_cbk->notification.stateChange.notificationHeader.
@@ -240,6 +258,13 @@ static SaAisErrorT ntfa_alloc_callback_n
                }
                break;
        case SA_NTF_TYPE_ALARM:
+               TRACE_2("type: SA_NTF_TYPE_ALARM");
+               not_cbk_header = 
&not_cbk->notification.alarm.notificationHeader;
+               if (!ntfsv_sanamet_is_valid(not_cbk_header->notificationObject) 
+                       || 
!ntfsv_sanamet_is_valid(not_cbk_header->notifyingObject)) {
+                       rc = SA_AIS_ERR_NAME_TOO_LONG;
+                       break;
+               }
                rc = saNtfAlarmNotificationAllocate(hdl_rec->local_hdl,
                                                    
&notification->notification.alarmNotification,
                                                    not_cbk->notification.alarm.
@@ -273,6 +298,12 @@ static SaAisErrorT ntfa_alloc_callback_n
                break;
        case SA_NTF_TYPE_SECURITY_ALARM:
                TRACE_2("type: SA_NTF_TYPE_SECURITY_ALARM");
+               not_cbk_header = 
&not_cbk->notification.securityAlarm.notificationHeader;
+               if (!ntfsv_sanamet_is_valid(not_cbk_header->notificationObject) 
+                       || 
!ntfsv_sanamet_is_valid(not_cbk_header->notifyingObject)) {
+                       rc = SA_AIS_ERR_NAME_TOO_LONG;
+                       break;
+               }               
                rc = saNtfSecurityAlarmNotificationAllocate(hdl_rec->local_hdl,
                                                            
&notification->notification.securityAlarmNotification,
                                                            
not_cbk->notification.securityAlarm.notificationHeader.
diff --git a/osaf/libs/common/ntfsv/ntfsv_enc_dec.c 
b/osaf/libs/common/ntfsv/ntfsv_enc_dec.c
--- a/osaf/libs/common/ntfsv/ntfsv_enc_dec.c
+++ b/osaf/libs/common/ntfsv/ntfsv_enc_dec.c
@@ -218,12 +218,11 @@ static uint32_t encodeSaNtfAttribute(NCS
        return rv;
 }
 
-static uint32_t decodeNtfValueT(NCS_UBAID *uba, SaNtfValueTypeT attributeType, 
SaNtfValueT *ntfAttr)
+static uint32_t decodeNtfValueT(NCS_UBAID *uba, SaNtfValueTypeT attributeType, 
SaNtfValueT *ntfAttr, bool checkExtLdapName)
 {
        uint8_t *p8;
        uint8_t local_data[8];
        binfl_t bf_val;
-
        switch (attributeType) {
        case SA_NTF_VALUE_UINT8:
                p8 = ncs_dec_flatten_space(uba, local_data, 1);
@@ -301,6 +300,21 @@ static uint32_t decodeNtfValueT(NCS_UBAI
        default:
                TRACE_2("attributeType %d not valid", (int)attributeType);
        }
+       
+       if (checkExtLdapName && attributeType == SA_NTF_VALUE_LDAP_NAME) {
+               if (!osaf_is_extended_names_enabled() 
+                       && ntfAttr->ptrVal.dataSize > 
SA_MAX_UNEXTENDED_NAME_LENGTH + 2) {
+                       LOG_ER("Environment variable SA_ENABLE_EXTENDED_NAMES "
+                                       "is not set, or not using extended name 
api");
+                       ntfAttr->ptrVal.dataSize = 0;
+               }
+               if (ntfAttr->ptrVal.dataSize > kOsafMaxDnLength + 2) {
+                       LOG_ER("Exceeding maximum of extended name length(%u)"
+                                       ,kOsafMaxDnLength);
+                       ntfAttr->ptrVal.dataSize = 0;
+               }
+       }
+
        return NCSCC_RC_SUCCESS;
 }
 
@@ -314,9 +328,9 @@ static uint32_t decodeSaNtfAttributeChan
        ntfAttr->oldAttributePresent = ncs_decode_32bit(&p8);
        ncs_dec_skip_space(uba, 8);
        if (ntfAttr->oldAttributePresent) {
-               rv = decodeNtfValueT(uba, ntfAttr->attributeType, 
&ntfAttr->oldAttributeValue);
+               rv = decodeNtfValueT(uba, ntfAttr->attributeType, 
&ntfAttr->oldAttributeValue, false);
        }
-       rv = decodeNtfValueT(uba, ntfAttr->attributeType, 
&ntfAttr->newAttributeValue);
+       rv = decodeNtfValueT(uba, ntfAttr->attributeType, 
&ntfAttr->newAttributeValue, false);
        return rv;
 }
 
@@ -329,7 +343,7 @@ static uint32_t decodeSaNtfAttribute(NCS
        ntfAttr->attributeId = ncs_decode_16bit(&p8);
        ntfAttr->attributeType = ncs_decode_16bit(&p8);
        ncs_dec_skip_space(uba, 4);
-       rv = decodeNtfValueT(uba, ntfAttr->attributeType, 
&ntfAttr->attributeValue);
+       rv = decodeNtfValueT(uba, ntfAttr->attributeType, 
&ntfAttr->attributeValue, false);
        return rv;
 }
 
@@ -839,7 +853,7 @@ static uint32_t ntfsv_dec_not_header(NCS
                param->additionalInfo[i].infoId = ncs_decode_16bit(&p8);
                param->additionalInfo[i].infoType = ncs_decode_16bit(&p8);
                ncs_dec_skip_space(uba, 4);
-               rv = decodeNtfValueT(uba, param->additionalInfo[i].infoType, 
&param->additionalInfo[i].infoValue);
+               rv = decodeNtfValueT(uba, param->additionalInfo[i].infoType, 
&param->additionalInfo[i].infoValue, true);
                TRACE_2("dec additionalInfo Type: %d\n", 
param->additionalInfo[i].infoType);
                TRACE_2("dec additionaInfo Value int32: %d\n", 
param->additionalInfo[i].infoValue.int32Val);
        }
@@ -887,13 +901,16 @@ uint32_t ntfsv_dec_not_msg(NCS_UBAID *ub
                ncs_dec_skip_space(uba, 12);
                rv = decodeNtfValueT(uba,
                                              
param->notification.alarm.thresholdInformation->thresholdValueType,
-                                             
&param->notification.alarm.thresholdInformation->thresholdValue);
+                                             
&param->notification.alarm.thresholdInformation->thresholdValue,
+                                                 false);
                rv = decodeNtfValueT(uba,
                                              
param->notification.alarm.thresholdInformation->thresholdValueType,
-                                             
&param->notification.alarm.thresholdInformation->thresholdHysteresis);
+                                             
&param->notification.alarm.thresholdInformation->thresholdHysteresis,
+                                                 false);
                rv = decodeNtfValueT(uba,
                                              
param->notification.alarm.thresholdInformation->thresholdValueType,
-                                             
&param->notification.alarm.thresholdInformation->observedValue);
+                                             
&param->notification.alarm.thresholdInformation->observedValue,
+                                                 false);
                for (i = 0; i < param->notification.alarm.numSpecificProblems; 
i++) {
                        p8 = ncs_dec_flatten_space(uba, local_data, 12);
                        param->notification.alarm.specificProblems[i].problemId 
= ncs_decode_16bit(&p8);
@@ -904,7 +921,8 @@ uint32_t ntfsv_dec_not_msg(NCS_UBAID *ub
                        ncs_dec_skip_space(uba, 12);
                        rv = decodeNtfValueT(uba,
                                                      
param->notification.alarm.specificProblems[i].problemType,
-                                                     
&param->notification.alarm.specificProblems[i].problemValue);
+                                                     
&param->notification.alarm.specificProblems[i].problemValue,
+                                                         true);
                }
                for (i = 0; i < 
param->notification.alarm.numMonitoredAttributes; i++) {
                        p8 = ncs_dec_flatten_space(uba, local_data, 4);
@@ -913,7 +931,8 @@ uint32_t ntfsv_dec_not_msg(NCS_UBAID *ub
                        ncs_dec_skip_space(uba, 4);
                        rv = decodeNtfValueT(uba,
                                                      
param->notification.alarm.monitoredAttributes[i].attributeType,
-                                                     
&param->notification.alarm.monitoredAttributes[i].attributeValue);
+                                                     
&param->notification.alarm.monitoredAttributes[i].attributeValue,
+                                                         true);
                }
                for (i = 0; i < 
param->notification.alarm.numProposedRepairActions; i++) {
                        p8 = ncs_dec_flatten_space(uba, local_data, 4);
@@ -921,9 +940,9 @@ uint32_t ntfsv_dec_not_msg(NCS_UBAID *ub
                        
param->notification.alarm.proposedRepairActions[i].actionValueType = 
ncs_decode_16bit(&p8);
                        ncs_dec_skip_space(uba, 4);
                        rv = decodeNtfValueT(uba,
-                                                     
param->notification.alarm.proposedRepairActions[i].
-                                                     actionValueType,
-                                                     
&param->notification.alarm.proposedRepairActions[i].actionValue);
+                                                     
param->notification.alarm.proposedRepairActions[i].actionValueType,
+                                                     
&param->notification.alarm.proposedRepairActions[i].actionValue,
+                                                         true);
                }
                break;
 
@@ -941,8 +960,7 @@ uint32_t ntfsv_dec_not_msg(NCS_UBAID *ub
 
                if (param->notification.objectCreateDelete.numAttributes > 0) {
                        for (i = 0; i < 
param->notification.objectCreateDelete.numAttributes; i++) {
-                               rv =
-                                   decodeSaNtfAttribute(uba,
+                               rv = decodeSaNtfAttribute(uba,
                                                         
&param->notification.objectCreateDelete.objectAttributes[i]);
                        }
                        
ntfsv_print_object_attributes(param->notification.objectCreateDelete.objectAttributes,
@@ -1000,20 +1018,22 @@ uint32_t ntfsv_dec_not_msg(NCS_UBAID *ub
                ncs_dec_skip_space(uba, 10);
                rv = decodeNtfValueT(uba,
                                              
param->notification.securityAlarm.securityAlarmDetector->valueType,
-                                             
&param->notification.securityAlarm.securityAlarmDetector->value);
+                                             
&param->notification.securityAlarm.securityAlarmDetector->value,
+                                                 true);
                p8 = ncs_dec_flatten_space(uba, local_data, 2);
                param->notification.securityAlarm.serviceUser->valueType = 
ncs_decode_16bit(&p8);
                ncs_dec_skip_space(uba, 2);
                rv = decodeNtfValueT(uba,
                                              
param->notification.securityAlarm.serviceUser->valueType,
-                                             
&param->notification.securityAlarm.serviceUser->value);
+                                             
&param->notification.securityAlarm.serviceUser->value,
+                                                 true);
                p8 = ncs_dec_flatten_space(uba, local_data, 2);
                param->notification.securityAlarm.serviceProvider->valueType = 
ncs_decode_16bit(&p8);
                ncs_dec_skip_space(uba, 2);
                rv = decodeNtfValueT(uba,
                                              
param->notification.securityAlarm.serviceProvider->valueType,
-                                             
&param->notification.securityAlarm.serviceProvider->value);
-
+                                             
&param->notification.securityAlarm.serviceProvider->value,
+                                                 true);
                break;
        default:
                TRACE("notificationType not valid");
@@ -1547,7 +1567,10 @@ static uint32_t ntfsv_dec_filter_msg(NCS
                        p8 = ncs_dec_flatten_space(uba, local_data, 4);
                        
f_rec->sec_al_filter->securityAlarmDetectors[i].valueType = 
ncs_decode_32bit(&p8);
                        ncs_dec_skip_space(uba, 4);
-                       rv = decodeNtfValueT(uba, 
f_rec->sec_al_filter->securityAlarmDetectors[i].valueType, 
&f_rec->sec_al_filter->securityAlarmDetectors[i].value);
+                       rv = decodeNtfValueT(uba, 
+                                                               
f_rec->sec_al_filter->securityAlarmDetectors[i].valueType, 
+                                                               
&f_rec->sec_al_filter->securityAlarmDetectors[i].value,
+                                                               false);
                        if (rv != NCSCC_RC_SUCCESS)
                                goto error_free;
                }                                               
@@ -1555,7 +1578,10 @@ static uint32_t ntfsv_dec_filter_msg(NCS
                        p8 = ncs_dec_flatten_space(uba, local_data, 4);
                        f_rec->sec_al_filter->serviceProviders[i].valueType = 
ncs_decode_32bit(&p8);
                        ncs_dec_skip_space(uba, 4);
-                       rv = decodeNtfValueT(uba, 
f_rec->sec_al_filter->serviceProviders[i].valueType, 
&f_rec->sec_al_filter->serviceProviders[i].value);
+                       rv = decodeNtfValueT(uba, 
+                                                               
f_rec->sec_al_filter->serviceProviders[i].valueType, 
+                                                               
&f_rec->sec_al_filter->serviceProviders[i].value,
+                                                               false);
                        if (rv != NCSCC_RC_SUCCESS)
                                goto error_free;
                }                                 
@@ -1563,7 +1589,10 @@ static uint32_t ntfsv_dec_filter_msg(NCS
                        p8 = ncs_dec_flatten_space(uba, local_data, 4);
                        f_rec->sec_al_filter->serviceUsers[i].valueType = 
ncs_decode_32bit(&p8);
                        ncs_dec_skip_space(uba, 4);
-                       rv = decodeNtfValueT(uba, 
f_rec->sec_al_filter->serviceUsers[i].valueType, 
&f_rec->sec_al_filter->serviceUsers[i].value);
+                       rv = decodeNtfValueT(uba, 
+                                                               
f_rec->sec_al_filter->serviceUsers[i].valueType, 
+                                                               
&f_rec->sec_al_filter->serviceUsers[i].value,
+                                                               false);
                        if (rv != NCSCC_RC_SUCCESS)
                                goto error_free;
                }                                 
diff --git a/osaf/libs/common/ntfsv/ntfsv_mem.c 
b/osaf/libs/common/ntfsv/ntfsv_mem.c
--- a/osaf/libs/common/ntfsv/ntfsv_mem.c
+++ b/osaf/libs/common/ntfsv/ntfsv_mem.c
@@ -822,6 +822,7 @@ SaAisErrorT ntfsv_ptr_val_alloc(v_data *
                nv->ptrVal.dataOffset = vd->size;
                nv->ptrVal.dataSize = data_size;
                *data_ptr = vd->p_base + vd->size;
+               memset(*data_ptr, 0, data_size);
                vd->size += data_size;
        } else {
                TRACE("SA_AIS_ERR_NO_SPACE\n");


------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to