summaryrefslogtreecommitdiffstats
path: root/lasso
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-09-30 16:53:06 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-09-30 16:53:06 +0000
commite2de175d223a3febd6e43d61fb28c5455b676d89 (patch)
tree9b29a631eca6e1f6177acbff53ecf5f96564a9d1 /lasso
parentfd0c21430da91a78e6d6e1000f0e5b47b4b3f172 (diff)
downloadlasso-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')
-rw-r--r--lasso/Attic/protocols/federation_termination_notification.c15
-rw-r--r--lasso/Attic/protocols/logout_request.c9
-rw-r--r--lasso/Attic/protocols/logout_response.c11
-rw-r--r--lasso/Attic/protocols/name_identifier_mapping_request.c5
-rw-r--r--lasso/Attic/protocols/name_identifier_mapping_response.c3
-rw-r--r--lasso/Attic/protocols/register_name_identifier_request.c9
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);