Bug 2225259

Summary: sip6-6.6.2-1.el9 introduces a regression bug when using sub-classed C++ exceptions
Product: Red Hat Enterprise Linux 9 Reporter: Steve Barcomb <sbarcomb>
Component: sip6Assignee: Jan Grulich <jgrulich>
Status: VERIFIED --- QA Contact: Tomas Pelka <tpelka>
Severity: medium Docs Contact:
Priority: medium    
Version: 9.2CC: desktop-qa-list, tpopela
Target Milestone: rcKeywords: Regression, Triaged, ZStream
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: sip6-6.6.2-2.el9 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 2225605 (view as bug list) Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2225605    

Description Steve Barcomb 2023-07-24 19:16:55 UTC
Customer description:

We are see a regression bug between sip6-6.5.1 and sip6-6.6.2. Basically code like this no longer works and results in a compilation error while doing the sip-build.

  31   │ %Exception mylib::Exception(SIP_Exception) /PyName=mylibException/ {
  32   │ %TypeHeaderCode
  33   │ #include <Exception.h>
  34   │ %End
  35   │ %RaiseCode
  36   │     const char *detail = sipExceptionRef.what();
  37   │     if (mylib::TimeoutException *te = dynamic_cast<mylib::TimeoutException *>(&sipExceptionRef)) {
  38   │         SIP_BLOCK_THREADS
  39   │         PyErr_SetString(sipException_mylib_TimeoutException, detail);
  40   │         SIP_UNBLOCK_THREADS
  41   │     }
  42   │     else if (mylib::MetadataException *me = dynamic_cast<mylib::MetadataException *>(&sipExceptionRef)) {
  43   │         SIP_BLOCK_THREADS
  44   │         PyErr_SetString(sipException_mylib_MetadataException, detail);
  45   │         SIP_UNBLOCK_THREADS
  46   │     }
  47   │     else {
  48   │         SIP_BLOCK_THREADS
  49   │         PyErr_SetString(sipException_mylib_Exception, detail);
  50   │         SIP_UNBLOCK_THREADS
  51   │     }
  52   │ %End
  53   │ 
  54   │ }; // Exception
  55   │ 
  56   │ %Exception mylib::TimeoutException(mylib::Exception) /PyName=mylibTimeoutException/ {
  57   │ %TypeHeaderCode
  58   │ #include <Exception.h>
  59   │ %End
  60   │ %RaiseCode
  61   │     const char *detail = sipExceptionRef.what();
  62   │     SIP_BLOCK_THREADS
  63   │     PyErr_SetString(sipException_mylib_TimeoutException, detail);
  64   │     SIP_UNBLOCK_THREADS
  65   │ %End
  66   │ }; // TimeoutException

The bug has already been fixed by the upstream project in the 6.6 branch with this commit.
https://www.riverbankcomputing.com/hg/sip/rev/1430b279a3c9

Define the value or impact to you or the business
This bug was impeding our progress towards moving to el9 since it was breaking builds of internal software. As a short term stop gap we can downgrade to sip6-6.5.1 on our build machine. But that is not a tenable long term solution.