diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index a1a0c0469cdb107de1735dad065920b33e733a01..e340527d97e8c2454855771b8a736bd1cc1d1973 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -171,7 +171,15 @@ pj_bool_t transaction_response_cb(pjsip_rx_data *rdata)
 
 pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
 {
+    if (!rdata or !rdata->msg_info.msg) {
+        ERROR("SIPVoIPLink: rx_data is NULL");
+        return false;
+    }
     pjsip_method *method = &rdata->msg_info.msg->line.req.method;
+    if (!method) {
+        ERROR("SIPVoIPLink: method is NULL");
+        return false;
+    }
 
     if (method->id == PJSIP_ACK_METHOD && pjsip_rdata_get_dlg(rdata))
         return true;
@@ -188,15 +196,19 @@ pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
         pj_str_t *str = &method->name;
         std::string request(str->ptr, str->slen);
 
-        if (request.find("NOTIFY") != (size_t)-1) {
-            int voicemail;
-
-            if (sscanf((const char*)rdata->msg_info.msg->body->data, "Voice-Message: %d/", &voicemail) == 1 && voicemail != 0)
-                Manager::instance().startVoiceMessageNotification(account_id, voicemail);
+        if (request.find("NOTIFY") != std::string::npos) {
+            if (rdata->msg_info.msg->body) {
+                void *data = rdata->msg_info.msg->body->data;
+                if (data) {
+                    int voicemail = 0;
+                    int ret = sscanf((const char*) data, "Voice-Message: %d/", &voicemail);
+                    if (ret == 1 and voicemail != 0)
+                        Manager::instance().startVoiceMessageNotification(account_id, voicemail);
+                }
+            }
         }
 
         pjsip_endpt_respond_stateless(endpt_, rdata, PJSIP_SC_OK, NULL, NULL, NULL);
-
         return true;
     } else if (method->id == PJSIP_OPTIONS_METHOD) {
         handleIncomingOptions(rdata);