diff options
author | Nicolas Clapies <nclapies@entrouvert.com> | 2004-09-30 16:53:06 +0000 |
---|---|---|
committer | Nicolas Clapies <nclapies@entrouvert.com> | 2004-09-30 16:53:06 +0000 |
commit | e2de175d223a3febd6e43d61fb28c5455b676d89 (patch) | |
tree | 9b29a631eca6e1f6177acbff53ecf5f96564a9d1 /lasso | |
parent | fd0c21430da91a78e6d6e1000f0e5b47b4b3f172 (diff) | |
download | lasso-e2de175d223a3febd6e43d61fb28c5455b676d89.tar.gz lasso-e2de175d223a3febd6e43d61fb28c5455b676d89.tar.xz lasso-e2de175d223a3febd6e43d61fb28c5455b676d89.zip |
Fixed a critical segfault bug when parsing an invalid SOAP message in private method lasso_{protocol_type}_new_from_soap().
Diffstat (limited to 'lasso')
6 files changed, 21 insertions, 31 deletions
diff --git a/lasso/Attic/protocols/federation_termination_notification.c b/lasso/Attic/protocols/federation_termination_notification.c index 0d66c955..1e337609 100644 --- a/lasso/Attic/protocols/federation_termination_notification.c +++ b/lasso/Attic/protocols/federation_termination_notification.c @@ -219,17 +219,18 @@ lasso_federation_termination_notification_new_from_soap(const gchar *buffer) LassoNode *envelope, *lassoNode_notification; xmlNodePtr xmlNode_notification; LassoNodeClass *class; - - notification = LASSO_NODE(g_object_new(LASSO_TYPE_FEDERATION_TERMINATION_NOTIFICATION, NULL)); - + envelope = lasso_node_new_from_dump(buffer); + if (LASSO_IS_NODE(envelope) == FALSE) { + return NULL; + } + + notification = LASSO_NODE(g_object_new(LASSO_TYPE_FEDERATION_TERMINATION_NOTIFICATION, NULL)); lassoNode_notification = lasso_node_get_child(envelope, "FederationTerminationNotification", - lassoLibHRef, NULL); - + lassoLibHRef, NULL); class = LASSO_NODE_GET_CLASS(lassoNode_notification); xmlNode_notification = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_notification)), 1); - lasso_node_destroy(lassoNode_notification); - + lasso_node_destroy(lassoNode_notification); class = LASSO_NODE_GET_CLASS(notification); class->set_xmlNode(LASSO_NODE(notification), xmlNode_notification); lasso_node_destroy(envelope); diff --git a/lasso/Attic/protocols/logout_request.c b/lasso/Attic/protocols/logout_request.c index 8640c8e8..17cc7585 100644 --- a/lasso/Attic/protocols/logout_request.c +++ b/lasso/Attic/protocols/logout_request.c @@ -237,16 +237,17 @@ lasso_logout_request_new_from_soap(gchar *buffer) xmlNodePtr xmlNode_request; LassoNodeClass *class; - request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); - envelope = lasso_node_new_from_dump(buffer); + if (LASSO_IS_NODE(envelope) == FALSE) { + return NULL; + } + + request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); lassoNode_request = lasso_node_get_child(envelope, "LogoutRequest", lassoLibHRef, NULL); - class = LASSO_NODE_GET_CLASS(lassoNode_request); xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1); lasso_node_destroy(lassoNode_request); - class = LASSO_NODE_GET_CLASS(request); class->set_xmlNode(LASSO_NODE(request), xmlNode_request); lasso_node_destroy(envelope); diff --git a/lasso/Attic/protocols/logout_response.c b/lasso/Attic/protocols/logout_response.c index 7158b61d..26418977 100644 --- a/lasso/Attic/protocols/logout_response.c +++ b/lasso/Attic/protocols/logout_response.c @@ -287,24 +287,17 @@ lasso_logout_response_new_from_soap(gchar *buffer) xmlNodePtr xmlNode_response; LassoNodeClass *class; - response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); - envelope = lasso_node_new_from_dump(buffer); - if(envelope == NULL) { - message(G_LOG_LEVEL_WARNING, "Error while parsing the soap msg\n"); + if(LASSO_IS_NODE(envelope) == FALSE) { return NULL; } + response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); lassoNode_response = lasso_node_get_child(envelope, "LogoutResponse", NULL, NULL); - if(lassoNode_response == NULL) { - message(G_LOG_LEVEL_WARNING, "LogoutResponse node not found\n"); - return NULL; - } class = LASSO_NODE_GET_CLASS(lassoNode_response); xmlNode_response = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_response)), 1); lasso_node_destroy(lassoNode_response); - class = LASSO_NODE_GET_CLASS(response); class->set_xmlNode(LASSO_NODE(response), xmlNode_response); lasso_node_destroy(envelope); diff --git a/lasso/Attic/protocols/name_identifier_mapping_request.c b/lasso/Attic/protocols/name_identifier_mapping_request.c index 0559ab50..f4084571 100644 --- a/lasso/Attic/protocols/name_identifier_mapping_request.c +++ b/lasso/Attic/protocols/name_identifier_mapping_request.c @@ -140,18 +140,15 @@ lasso_name_identifier_mapping_request_new_from_soap(const gchar *buffer) } request = LASSO_NODE(g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING_REQUEST, NULL)); - lassoNode_request = lasso_node_get_child(envelope, "NameIdentifierMappingRequest", lassoLibHRef, NULL); - class = LASSO_NODE_GET_CLASS(lassoNode_request); xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1); lasso_node_destroy(lassoNode_request); - class = LASSO_NODE_GET_CLASS(request); class->set_xmlNode(LASSO_NODE(request), xmlNode_request); lasso_node_destroy(envelope); - + return request; } diff --git a/lasso/Attic/protocols/name_identifier_mapping_response.c b/lasso/Attic/protocols/name_identifier_mapping_response.c index cf946b92..3137d35e 100644 --- a/lasso/Attic/protocols/name_identifier_mapping_response.c +++ b/lasso/Attic/protocols/name_identifier_mapping_response.c @@ -72,14 +72,11 @@ lasso_name_identifier_mapping_response_new_from_soap(const gchar *buffer) } response = LASSO_NODE(g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING_RESPONSE, NULL)); - lassoNode_response = lasso_node_get_child(envelope, "NameIdentifierMappingResponse", lassoLibHRef, NULL); - class = LASSO_NODE_GET_CLASS(lassoNode_response); xmlNode_response = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_response)), 1); lasso_node_destroy(lassoNode_response); - class = LASSO_NODE_GET_CLASS(response); class->set_xmlNode(LASSO_NODE(response), xmlNode_response); lasso_node_destroy(envelope); diff --git a/lasso/Attic/protocols/register_name_identifier_request.c b/lasso/Attic/protocols/register_name_identifier_request.c index 6e03da38..729ab3cc 100644 --- a/lasso/Attic/protocols/register_name_identifier_request.c +++ b/lasso/Attic/protocols/register_name_identifier_request.c @@ -314,16 +314,17 @@ lasso_register_name_identifier_request_new_from_soap(const xmlChar *buffer) xmlNodePtr xmlNode_request; LassoNodeClass *class; - request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); - envelope = lasso_node_new_from_dump(buffer); + if (LASSO_IS_NODE(envelope) == FALSE) { + return NULL; + } + + request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); lassoNode_request = lasso_node_get_child(envelope, "RegisterNameIdentifierRequest", lassoLibHRef, NULL); - class = LASSO_NODE_GET_CLASS(lassoNode_request); xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1); lasso_node_destroy(lassoNode_request); - class = LASSO_NODE_GET_CLASS(request); class->set_xmlNode(LASSO_NODE(request), xmlNode_request); lasso_node_destroy(envelope); |