axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Mitchell (JIRA)" <>
Subject [jira] Commented: (AXIS2C-944) guththila parser ignores XML scope rules on namespace declarations with the same prefix
Date Thu, 31 Jan 2008 18:25:08 GMT


Bill Mitchell commented on AXIS2C-944:

Looking at the code in more detail, I see that guththila_xml_writer examines the namespace
7 times from the outermost to the innermost, and twice the correct way from the innermost
to the outermost.  All two times that guththila_xml_parser.c examines the namespace stack,
it does it from the outermost to the innermost, i.e., in the wrong order.

guththila_get_namespace_prefix_by_number(), guththila_get_namespace_uri_by_number() makes
the use of the number visible to the caller.  These are used by the guththila_main sample
program, and interestingly use 1-origin indexing.  

guththila_get_attribute_XXX_by_number() uses the same stack routines, so the stack construct
is not used just for namespaces.  As with the guththila_get_namespace_XXX_by_number() routines,
these are used by the guththila_main sample program and use 1-origin indexing.

Given the additional interface routines that make the numbering scheme visible publicly, the
right solution appears to be to fix the offending loops in guththila_xml_parser.c and guththila_xml_writer.c
to examine the stack from the higher index down to zero.  Not the "clever" solution to number
the stack from the top of the stack backwards.  

> guththila parser ignores XML scope rules on namespace declarations with the same prefix
> ---------------------------------------------------------------------------------------
>                 Key: AXIS2C-944
>                 URL:
>             Project: Axis2-C
>          Issue Type: Bug
>          Components: guththila
>    Affects Versions: Current (Nightly)
>         Environment: Windows XP, Visual Studio 2005, guththila, libcurl
>            Reporter: Bill Mitchell
> The guththila parser looks for a match on the namespace prefix/URI from the outermost
element inwards.  This violates the scope rules for XML namespaces, see
 This problem holds for both incoming messages in guththila_xml_parser.c and outgoing messages
in guththila_xml_writer.c.  Essentially every loop involving guththila_stack_get_by_index()
is suspect, and either needs to start at (stack_size - 1) and go backwards, or fetch the namespace
at the (stack_size - 1 - i)  index.  
> I uncovered this by inspection, not by testing, so there is some chance that my understanding
is incorrect.  But I looked at guththila_stack.c and indeed for index 0 it returns the outermost/first
element pushed, so there is no tricky logic there to get the stack in the other order.  Of
course, one could indeed fix this problem by changing guththila_stack_get_by_index() to return
the elements from the innermost/most recently pushed back out to the outermost.  This would
be the easiest fix to make, and the safest in that it would not change the logic in any of
the existing loops, although it would seem less clear to the casual reader.  
> In other words, the current logic:
> guththila_stack_get_by_index(
>     guththila_stack_t * stack,
>     int index,
>     const axutil_env_t * env) 
> {
>     return index < stack->top ? stack->data[index] : NULL;
> } 
> could be changed to read:
> {
>     return index < stack->top ? stack->data[stack->top - index - 1] : 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:
For additional commands, e-mail:

View raw message