[
https://issues.apache.org/jira/browse/AXIS2-5448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jürgen Keil updated AXIS2-5448:
-------------------------------
Attachment: test.c
Makefile
bug_date.xsd
bug_date.xml
bug_date.wsdl
sh $a2c/bin/tools/wsdl2c/WSDL2C.sh -uri bug_date.wsdl -d adb -u -S bug_date
test.c can be used to parse bug_date.xml to C structures.
> WSDL2C: sporadic failures in deserializer code generated for xs:date, returns
> wrong date value
> ----------------------------------------------------------------------------------------------
>
> Key: AXIS2-5448
> URL: https://issues.apache.org/jira/browse/AXIS2-5448
> Project: Axis2
> Issue Type: Bug
> Components: adb, codegen
> Affects Versions: 1.6.2
> Environment: iOS 5.1 or MacOS X 10.7.5
> Reporter: Jürgen Keil
> Attachments: bug_date.wsdl, bug_date.xml, bug_date.xsd, Makefile,
> test.c
>
>
> The xml deserializer code generated for xs:date calls
> axutil_date_time_deserialize_date_time()
> instead of axutil_date_time_deserialize_date() to convert a date from string
> format (e.g. "2012-09-30")
> to a axutil_date_time_t.
> This results in random failures parsing the date. The deserialized date
> sometimes contains the current date instead of the date value that was
> present in the xml data.
> How does it fail in axutil_date_time_deserialize_date_time() ? It fails
> because:
> - A wrong sscanf format string is used to parse the date, sscanf is unable to
> fill all arguments. sscanf returns 3, and
> axutil_date_time_deserialize_date_time() does not recognize this failure.
> - after that, axutil_date_time_deserialize_date_time() accesses
> uninitialized variables for "hour",
> "min", and "sec", and may randomly return parse errors, because hour, min,
> sec contain a value that is out of range. The end result is that sometimes
> no parsed date is written to the deserialized date, and we get the current
> date instead.
> In the debugger, we have this:
> (gdb) bt
> #0 axutil_date_time_deserialize_date_time (date_time=0x1001024d0,
> env=0x1001009b0, date_time_str=0x100102410 "2012-09-30") at date_time.c:275
> #1 0x0000000100002a9d in adb_ISODate_deserialize_from_string
> (_ISODate=0x100102380, env=0x1001009b0, node_value=0x100102410 "2012-09-30",
> parent=0x0) at adb_ISODate.c:180
> #2 0x0000000100002bcd in adb_ISODate_deserialize_obj (_ISODate=0x100102380,
> env=0x1001009b0, dp_parent=<value temporarily unavailable, due to
> optimizations>, dp_is_early_node_valid=0x0, dont_care_minoccurs=1352029547)
> at adb_ISODate.c:256
> #3 0x0000000100001de8 in adb_Document_deserialize_obj
> (_Document=0x100101a40, env=0x1001009b0, dp_parent=<value temporarily
> unavailable, due to optimizations>, dp_is_early_node_valid=<value temporarily
> unavailable, due to optimizations>, dont_care_minoccurs=0) at
> adb_Document.c:367
> #4 0x0000000100001548 in main (argc=<value temporarily unavailable, due to
> optimizations>, argv=<value temporarily unavailable, due to optimizations>)
> at test.c:44
> (gdb) n
> 271 if(*date_time_str == '-')
> (gdb) n
> 275 sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%fZ", &year,
> &mon, &day, &hour, &min, &sec);
> (gdb) p hour
> $8 = 1352028776
> (gdb) p min
> $9 = 1113587712
> (gdb) p sec
> $10 = 1.4821702e-39
> (gdb) n
> 271 if(*date_time_str == '-')
> (gdb) print $rax
> $11 = 3
> (gdb) p hour
> $12 = 1352028776
> (gdb) p min
> $13 = 1113587712
> (gdb) p sec
> $14 = 1.4821702e-39
> (gdb) p year
> $15 = 2012
> (gdb) p mon
> $17 = 9
> (gdb) p day
> $18 = 30
> (gdb) c
> Continuing.
> OK (<-- xml deserializer returned AXIS2_SUCCESS)
> 2012-11-04 (<-- wrong date, expected date is 2012-09-30)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]