axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aleksey Mokhonko (JIRA)" <j...@apache.org>
Subject [jira] Created: (AXIS2C-1528) axiom_util_get_first_child_element_with_localname() returns wrong child_node if a sibling is present and the first node does not match
Date Thu, 13 Jan 2011 20:57:46 GMT
axiom_util_get_first_child_element_with_localname() returns wrong child_node if a sibling is
present and the first node does not match
--------------------------------------------------------------------------------------------------------------------------------------

                 Key: AXIS2C-1528
                 URL: https://issues.apache.org/jira/browse/AXIS2C-1528
             Project: Axis2-C
          Issue Type: Bug
          Components: util
    Affects Versions: 1.6.0
         Environment: Linux
            Reporter: Aleksey Mokhonko


Bug is obvious. I just show what to fix.

File: om_util.c
Routine: axiom_util_get_first_child_element_with_localname_attr()
Line: 830
Present: 

if (om_attr_name && NULL != om_attr_value &&
                                    axutil_strcmp(om_attr_name, attr_name) == 0
                                    && axutil_strcmp(om_attr_value,
                                                     attr_value) == 0)
                                {
                                    *child_node = child; /* <--------------------------------
 !!!!!!!!!!!!!!!! */
                                    return om_ele;
                                }

Must be:


if (om_attr_name && NULL != om_attr_value &&
                                    axutil_strcmp(om_attr_name, attr_name) == 0
                                    && axutil_strcmp(om_attr_value,
                                                     attr_value) == 0)
                                {
                                    *child_node = next_sibling; /* <--------------------------------
!!!!!!!!!!!!!!!! */
                                    return om_ele;
                                }

===============================================
More detailed:
===============================================

    next_sibling = axiom_node_get_next_sibling(child, env);
    while (next_sibling)
    {
        if (axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT)
        {
            om_ele =
                (axiom_element_t *) axiom_node_get_data_element(next_sibling,
                                                                env);
            if (om_ele)
            {
                child_localname = axiom_element_get_localname(om_ele, env);
                if (child_localname &&
                    axutil_strcmp(child_localname, localname) == 0)
                {
                    attr_ht = axiom_element_get_all_attributes(om_ele, env);
                    if (attr_ht)
                    {

                        for (hi = axutil_hash_first(attr_ht, env); hi;
                             hi = axutil_hash_next(env, hi))
                        {
                            void *val = NULL;
                            axutil_hash_this(hi, NULL, NULL, &val);
                            if (val)
                            {
                                om_attr = (axiom_attribute_t *) val;
                                om_attr_name =
                                    axiom_attribute_get_localname(om_attr, env);

                                om_attr_value =
                                    axiom_attribute_get_value(om_attr, env);

                                if (om_attr_name && NULL != om_attr_value &&
                                    axutil_strcmp(om_attr_name, attr_name) == 0
                                    && axutil_strcmp(om_attr_value,
                                                     attr_value) == 0)
                                {
                                    *child_node = next_sibling; /* !!!!!!!!!!!!!!!! */ <-----------------------------------------
 !!!!!!!!!!!!!!!!!!!!!!!!!
                                    return om_ele;
                                }
                                om_attr = NULL;
                                om_attr_name = NULL;
                                om_attr_value = NULL;
                            }
                        }
                    }
                }
                    
            }
            om_ele = NULL;
            child_localname = NULL;
        }
        next_sibling = axiom_node_get_next_sibling(next_sibling, env);
    }
    return NULL;
}




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: c-dev-help@axis.apache.org


Mime
View raw message