Bug 695777 - Variant conversion from string with negative number to unsigned data type no longer throws in RHEL 6
Summary: Variant conversion from string with negative number to unsigned data type no ...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: qpid-cpp
Version: 6.2
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: rc
: 6.2
Assignee: Kim van der Riet
QA Contact: Leonid Zhaldybin
URL:
Whiteboard:
Depends On:
Blocks: 698367
TreeView+ depends on / blocked
 
Reported: 2011-04-12 16:37 UTC by Andy Goldstein
Modified: 2014-11-09 22:38 UTC (History)
6 users (show)

Fixed In Version: qpid-cpp-0.12-1
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2011-12-06 16:50:58 UTC
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2011:1670 0 normal SHIPPED_LIVE qpid-cpp bug fix and enhancement update 2011-12-06 00:50:15 UTC

Description Andy Goldstein 2011-04-12 16:37:52 UTC
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

Comment 1 Andy Goldstein 2011-04-12 20:56:24 UTC
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

Comment 6 Leonid Zhaldybin 2011-10-31 16:26:18 UTC
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

Comment 7 errata-xmlrpc 2011-12-06 16:50:58 UTC
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


Note You need to log in before you can comment on or make changes to this bug.