axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nandika Jayawardana (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (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 Fri, 14 Jan 2011 18:18:47 GMT

     [ https://issues.apache.org/jira/browse/AXIS2C-1528?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Nandika Jayawardana resolved AXIS2C-1528.
-----------------------------------------

       Resolution: Fixed
    Fix Version/s: Next Version
         Assignee: Nandika Jayawardana

Fixed in the current svn trunk.



> 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
>            Assignee: Nandika Jayawardana
>             Fix For: Next Version
>
>
> 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