Hi Mav,

Sorry for disturbing!
We are using libpdel.
In our souce code, structs_xml_input is called with STRUCTS_XML_LOOSE which 
means unrecognised xml tags will be ignored.
We are doing some tests about this.

The xml file we are using is as follows and corresponding structs_type 
structs_field are well defined.

<?xml version="1.0" standalone="yes"?>
<AtmService_cdb_array>
 <AtmService_cdb_entry>
  <moid><class>AtmService</class><slot>3</slot><port>1</port></moid>
  
<data><numOfUsedAtmIwf>0</numOfUsedAtmIwf><transportPort><class>747</class><slot>3</slot><port>1</port></transportPort></data>
 </AtmService_cdb_entry>
 <AtmService_cdb_entry>
  <moid><class>AtmService</class><slot>4</slot><port>1</port></moid>
  
<data><numOfUsedAtmIwf>1</numOfUsedAtmIwf><transportPort><class>747</class><slot>4</slot><port>1</port></transportPort></data>
 </AtmService_cdb_entry>
</AtmService_cdb_array>

When an un necessary xml tag is added into the xml file(shown below) and 
corresponding structs_type and structs_field is kept unchanged. The xml file 
can no be parsed correctedly.

<?xml version="1.0" standalone="yes"?>
<AtmService_cdb_array>
 <AtmService_cdb_entry>
  <moid><class>AtmService</class><slot>3</slot><port>1</port></moid>
  
<data><for_test>1234</for_test><numOfUsedAtmIwf>0</numOfUsedAtmIwf><transportPort><class>747</class><slot>3</slot><port>1</port></transportPort></data>
 </AtmService_cdb_entry>
 <AtmService_cdb_entry>
  <moid><class>AtmService</class><slot>4</slot><port>1</port></moid>
  
<data><for_test>1234</for_test><numOfUsedAtmIwf>1</numOfUsedAtmIwf><transportPort><class>747</class><slot>4</slot><port>1</port></transportPort></data>
 </AtmService_cdb_entry>
</AtmService_cdb_array>

Xml tags after the first <for_test>1234</for_test> can not be handled correctly 
any more.

Looks like structs_xml_pop not be called for unrecognised tags after looking 
through source code of libpdel.
In the function of structs_xml_unnest, maybe "goto done;" need to be added to 
avoid this problem.

static void structs_xml_unnest(struct xml_input_info *info, const XML_Char 
*name)
{
        struct xmlinput_stackframe *const frame = &info->stack[info->depth];
        const struct structs_type *type;
        const char *s;
        char ebuf[64];
        void *data;

        /* Skip if any errors */
        if (info->error)
                return;
        if (info->skip) {
                info->skip--;
                        goto done;
                return;
        }
...

May I have your comments?
Thank you!

BR/ Yuzhu Chen

_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to