coin3d / pivy

python bindings to coin3d
ISC License
53 stars 37 forks source link

FreeCAD fails SIGSEGV, some pivy tests/ FAIL, one fails with SIGSEGV #98

Closed yopito closed 1 year ago

yopito commented 2 years ago

hello, while packaging FreeCAD 0.20, I have numerous SIGSEGV on FreeCAD's runtime (build is fine) I suspect some troubles with pivy or coin3, but I'm unsure.

Context: VoidLinux on x86_64, musl libc, python 3.10.5, pyside2 5.15.5, coin3 4.0.0, pivy 0.6.7

FreeCAD failure that make me think of coin3/pivy problem:

$ gdb --args FreeCAD  -t MeshTestsApp
(gdb) run
....

testPrimitiveCount (MeshTestsApp.PivyTestCases) ... ok
[New LWP 10712]

Thread 1 "FreeCAD" received signal SIGSEGV, Segmentation fault.
0x00007ffff7fb2d87 in __stpncpy (d=d@entry=0x555557c44b80 "", s=s@entry=0x7fff00000000 <error: Cannot access memory at address 0x7fff00000000>, n=n@entry=12) at src/string/stpncpy.c:18
18  src/string/stpncpy.c: No such file or directory.

(gdb) bt
#0  0x00007ffff7fb2d87 in __stpncpy (d=d@entry=0x555557c44b80 "", 
    s=s@entry=0x7fff00000000 <error: Cannot access memory at address 0x7fff00000000>, n=n@entry=12) at src/string/stpncpy.c:18
#1  0x00007ffff7fb356a in strncpy (d=d@entry=0x555557c44b80 "", 
    s=s@entry=0x7fff00000000 <error: Cannot access memory at address 0x7fff00000000>, n=n@entry=12) at src/string/strncpy.c:5
#2  0x00007fffe15c107a in cast_internal (self=self@entry=0x7fffe1ace4d0, obj=0x7fff6a9472b0, 
    type_name=0x7fff00000000 <error: Cannot access memory at address 0x7fff00000000>, type_len=12) at pivy/coinPYTHON_wrap.cxx:4289
#3  0x00007fffe15c11cf in cast (self=0x7fffe1ace4d0, args=<optimized out>) at pivy/coinPYTHON_wrap.cxx:4329
#4  0x00007ffff634c734 in ?? () from /lib/libpython3.10.so.1.0
#5  0x00007ffff630f425 in _PyObject_MakeTpCall () from /lib/libpython3.10.so.1.0
#6  0x00007ffff62c4dbb in _PyEval_EvalFrameDefault () from /lib/libpython3.10.so.1.0
#7  0x00007ffff63d6144 in ?? () from /lib/libpython3.10.so.1.0
#8  0x00007ffff6311f38 in ?? () from /lib/libpython3.10.so.1.0
#9  0x00007ffff62c4184 in _PyEval_EvalFrameDefault () from /lib/libpython3.10.so.1.0
#10 0x00007ffff63d6144 in ?? () from /lib/libpython3.10.so.1.0
#11 0x00007ffff62c4038 in _PyEval_EvalFrameDefault () from /lib/libpython3.10.so.1.0
...

So I ran tests/ from pivy with various results:

$ python /build/void/masterdir/builddir/pivy-0.6.7/tests/coin_tests.py
....
----------------------------------------------------------------------
Ran 94 tests in 0.030s

OK
$ python /build/void/masterdir/builddir/pivy-0.6.7/tests/pyside_test.py 
testAdresses (__main__.ShibokenTests) ... CppPointer to an instance of PySide.QtCore.QObject = 0x000055F3F152CE00
OverflowError: int too big to convert
/build/void/masterdir/builddir/pivy-0.6.7/tests/pyside_test.py:28: RuntimeWarning: libshiboken: Overflow: Value 18446744073709551615 exceeds limits of type  [unsigned] "m" (8bytes).
  wrapper.wrapInstance(0xFFFFFFFFFFFFFFFF, QtCore.QObject)
ERROR

======================================================================
ERROR: testAdresses (__main__.ShibokenTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/build/void/masterdir/builddir/pivy-0.6.7/tests/pyside_test.py", line 28, in testAdresses
    wrapper.wrapInstance(0xFFFFFFFFFFFFFFFF, QtCore.QObject)
OverflowError

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)
$ python /build/void/masterdir/builddir/pivy-0.6.7/tests/quarter_tests.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
$ python /build/void/masterdir/builddir/pivy-0.6.7/tests/visual_test.py 
Segmentation fault

Reusing content of pivy-0.6.7/tests/visual_test.py:

$ python
Python 3.10.5 (main, Jun  8 2022, 02:00:39) [GCC 10.2.1 20201203] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from PySide2 import QtWidgets
>>> from pivy import coin, quarter
>>> app = QtWidgets.QApplication(sys.argv)
>>> viewer = quarter.QuarterWidget()
Segmentation fault

any thoughts ?

yopito commented 2 years ago

using pdb on https://github.com/coin3d/pivy/blob/master/pivy/quarter/QuarterWidget.py:

...

(Pdb) n
> /usr/lib/python3.10/site-packages/pivy/quarter/QuarterWidget.py(226)__init__()
-> if statemachine and statemachine.isOfType(coin.SoScXMLStateMachine.getClassTypeId()):

(Pdb) l
221             # callbacks which depends on other state being initialized
222             self.eventmanager = EventManager(self)
223             self.devicemanager = DeviceManager(self)
224     
225             statemachine = coin.ScXML.readFile(values["scxml"])
226  ->         if statemachine and statemachine.isOfType(coin.SoScXMLStateMachine.getClassTypeId()):
227                 sostatemachine = coin.cast(statemachine, "SoScXMLStateMachine")
228                 statemachine.addStateChangeCallback(statechangeCB, self)
229                 self.soeventmanager.addSoScXMLStateMachine(sostatemachine)
230                 sostatemachine.initialize()
231             else:

(Pdb) p statemachine
<pivy.coin.ScXMLStateMachine; proxy of <Swig Object of type 'ScXMLStateMachine *' at 0x7f813bd02cd0> >

(Pdb) p statemachine.isOfType(coin.SoScXMLStateMachine.getClassTypeId())
1

> /usr/lib/python3.10/site-packages/pivy/quarter/QuarterWidget.py(227)__init__()->None
-> sostatemachine = coin.cast(statemachine, "SoScXMLStateMachine")
(Pdb) n
SystemError: <built-in function cast> returned NULL without setting an exception
waebbl commented 2 years ago

On Gentoo opencascade fails to build with musl[1][2]. I wonder if this errors might be related to musl as well?

[1] https://bugs.gentoo.org/832742 [2] https://dev.opencascade.org/content/support-different-libc-implementations-linux

yopito commented 2 years ago

IMHO, not relevant: this issue is a runtime problem, not a build one. and related packages are fine with musl.

wwmayer commented 2 years ago

I suspect some troubles with pivy or coin3, but I'm unsure.

Yes, it's an issue with pivy's coin.cast function. This function has been re-implemented recently to fix another issue but causes a segmentation fault now.

For more details see: https://github.com/coin3d/pivy/pull/91#issuecomment-1154992357

yopito commented 1 year ago

@wwmayer : ah, ok. thanks for pointing this. hope that someone can fix this (my C++ knowledge is inexistant).

marioalexis84 commented 1 year ago

See https://github.com/coin3d/pivy/pull/99

yopito commented 1 year ago

FYI, I've applied patch of PR #99 on pivy and used it with FreeCAD 20.1: a lot more integrated tests passing now (via FreeCAD -t 0)

Edit: for me this issue will be fixed if #99 is getting merged.