Bug 788137 - [PATCH] Fix broken handling of member variables
Summary: [PATCH] Fix broken handling of member variables
Keywords:
Status: CLOSED WONTFIX
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: swig
Version: 6.4
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: rc
: ---
Assignee: Jitka Plesnikova
QA Contact: qe-baseos-tools-bugs
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-02-07 15:09 UTC by Karel Klíč
Modified: 2014-10-30 23:45 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2014-10-30 23:45:43 UTC
Target Upstream Version:


Attachments (Terms of Use)
Proposed patch (2.69 KB, patch)
2012-02-07 15:09 UTC, Karel Klíč
no flags Details | Diff

Description Karel Klíč 2012-02-07 15:09:14 UTC
Created attachment 559978 [details]
Proposed patch

Description of problem:
Swig allows to define accessor functions (set, get) to a member variable. The swig mechanism to handle set function is broken in swig-1.3.40-6.el6.

This prevents building of libsolv EPEL package.

This bug has been fixed in swig 2.0.4 (or sooner, I didn't check). I have backported the bugfix from 2.0.4, so the code for accessors generated by swig-1.3.40 and swig-2.0.4 is identical. This solved the problem.

Version-Release number of selected component (if applicable):
swig-1.3.40-6.el6

How reproducible:
Always


Steps to Reproduce:
From libsolv (bindings/solv.i):
%extend XSolvable {
  const char *name;
  %{
    SWIGINTERN void XSolvable_name_set(XSolvable *xs, const char *name) {
      Pool *pool = xs->pool;
      pool->solvables[xs->id].name = pool_str2id(pool, name, 1);
    }
    SWIGINTERN const char *XSolvable_name_get(XSolvable *xs) {
      Pool *pool = xs->pool;
      return pool_id2str(pool, pool->solvables[xs->id].name);
    }
}

Generated code (set accessor wrapper; the code tries to assign to a void function call):
SWIGINTERN PyObject *_wrap_XSolvable_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
...
    arg2 = (char *)(buf2);
  if (arg2) {
    size_t size = strlen((const char *)((const char *)(arg2))) + 1;
    XSolvable_name_set(arg1,(char const *)arg2) = (char const *)(char *)memcpy((char *)malloc((size)*sizeof(char)), arg2, sizeof(char)*(size));
  } else {
    XSolvable_name_set(arg1,(char const *)arg2) = 0;
  }
}


Compilation:
/builddir/build/BUILD/libsolv/bindings/python/solv_python.c: In function '_wrap_XSolvable_name_set':
/builddir/build/BUILD/libsolv/bindings/python/solv_python.c:5334: error: invalid use of void expression
/builddir/build/BUILD/libsolv/bindings/python/solv_python.c:5336: error: invalid use of void expression

Comment 3 Suzanne Logcher 2012-02-14 23:31:32 UTC
This request was evaluated by Red Hat Product Management for
inclusion in the current release of Red Hat Enterprise Linux.
Because the affected component is not scheduled to be updated
in the current release, Red Hat is unfortunately unable to
address this request at this time. Red Hat invites you to
ask your support representative to propose this request, if
appropriate and relevant, in the next release of Red Hat
Enterprise Linux. If you would like it considered as an
exception in the current release, please ask your support
representative.

Comment 4 RHEL Program Management 2012-09-07 05:12:48 UTC
This request was evaluated by Red Hat Product Management for
inclusion in the current release of Red Hat Enterprise Linux.
Because the affected component is not scheduled to be updated
in the current release, Red Hat is unable to address this
request at this time.

Red Hat invites you to ask your support representative to
propose this request, if appropriate, in the next release of
Red Hat Enterprise Linux.

Comment 6 RHEL Program Management 2014-10-30 23:45:43 UTC
Development Management has reviewed and declined this request.
You may appeal this decision by reopening this request.


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