| Summary: | Variant conversion from string with negative number to unsigned data type no longer throws in RHEL 6 | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Andy Goldstein <agoldste> |
| Component: | qpid-cpp | Assignee: | Kim van der Riet <kim.vdriet> |
| Status: | CLOSED ERRATA | QA Contact: | Leonid Zhaldybin <lzhaldyb> |
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | 6.2 | CC: | esammons, gsim, iboverma, jneedle, lzhaldyb, tross |
| Target Milestone: | rc | ||
| Target Release: | 6.2 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | qpid-cpp-0.12-1 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2011-12-06 16:50:58 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Bug Depends On: | |||
| Bug Blocks: | 698367 | ||
Not sure if this is the root cause, but it seems like a change to gcc to better conform to the C++ standard specification might be the reason for the change in behavior. See the following links: http://boost.2283326.n4.nabble.com/conversion-lexical-cast-doesn-t-throw-td2593967.html https://bugzilla.redhat.com/show_bug.cgi?id=531919 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39802 Fixed upstream by http://svn.apache.org/viewvc?rev=1092219&view=rev and http://svn.apache.org/viewvc?rev=1092306&view=rev. Tested on RHEL6.2 on both main architectures (i686 and x86_64), packages versions: qpid-cpp-client-0.12-6.el6.i686 qpid-cpp-client-devel-0.12-6.el6.i686 qpid-cpp-client-rdma-0.12-6.el6.i686 qpid-cpp-client-ssl-0.12-6.el6.i686 qpid-cpp-debuginfo-0.12-6.el6.i686 qpid-cpp-server-0.12-6.el6.i686 qpid-cpp-server-cluster-0.12-6.el6.i686 qpid-cpp-server-devel-0.12-6.el6.i686 qpid-cpp-server-rdma-0.12-6.el6.i686 qpid-cpp-server-ssl-0.12-6.el6.i686 qpid-cpp-server-store-0.12-6.el6.i686 qpid-cpp-server-xml-0.12-6.el6.i686 qpid-java-client-0.10-11.el6.noarch qpid-java-common-0.10-11.el6.noarch qpid-java-example-0.10-11.el6.noarch qpid-java-jca-0.10-11.el6.noarch qpid-java-jca-zip-0.10-11.el6.noarch qpid-qmf-0.12-6.el6.i686 qpid-qmf-debuginfo-0.12-6.el6.i686 qpid-qmf-devel-0.12-6.el6.i686 qpid-tools-0.12-2.el6.noarch The example code from the description returns the right error: terminate called after throwing an instance of 'qpid::types::InvalidConversion' what(): invalid conversion: Cannot convert -5 (qpid/types/Variant.cpp:131) Aborted -> VERIFIED Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHBA-2011-1670.html |
Description of problem: In RHEL 5, converting a Variant such as "-5" to an unsigned short would throw an exception. In RHEL 6, no exception is thrown and the value wraps around (e.g. -5 becomes 65531). It looks like something in Boost's lexical_cast() implementation has changed between Boost 1.33.1 (RHEL 5) and 1.41.0 (RHEL 6). Version-Release number of selected component (if applicable): qpid-cpp-client-0.10-3.el6.x86_64.rpm How reproducible: 100% Steps to Reproduce: Compile and run the following on both RHEL 5 and RHEL 6: #include <iostream> #include <qpid/types/Variant.h> using namespace std; int main(int argc, char** argv) { uint16_t i; qpid::types::Variant v = "-5"; i = v; cout << i << endl; } Actual results: the number is converted. Running on RHEL 6 results in this output: 65531 Expected results: an exception that -5 can't be converted. When running on RHEL 5, it results in this output: terminate called after throwing an instance of 'qpid::types::InvalidConversion' what(): invalid conversion: Cannot convert -5 (qpid/types/Variant.cpp:118) Aborted