fontforge / libspiro

Spiro is the creation of Raph Levien. It simplifies the drawing of beautiful curves. (Migrated here from libspiro.sourceforge.net on 2013-04-20)
GNU General Public License v3.0
107 stars 25 forks source link

Crash in git master #4

Closed davelab6 closed 11 years ago

davelab6 commented 11 years ago

:)

$ ./fontforge.sh 
Script started, output file is /Users/dcrossland/FontForge-Debug-Output.txt
(lldb) Executing commands in 'debug-script.sh'.
(lldb)  #!/bin/sh
(lldb)  version
LLDB-179.5
(lldb)  settings set frame-format "frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name-with-args}{${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n"
(lldb)  target create /usr/local/bin/fontforge
Current executable set to '/usr/local/bin/fontforge' (x86_64).
(lldb)  target select 0
Current targets:
* target #0: /usr/local/bin/fontforge ( arch=x86_64-apple-macosx, platform=localhost )
(lldb)  run
Process 18877 launched: '/usr/local/bin/fontforge' (x86_64)
Command #6 'run' continued the target.
Copyright (c) 2000-2012 by George Williams.
 Executable based on sources from 14:57 GMT 31-Jul-2012-D.
 Library based on sources from 14:57 GMT 31-Jul-2012.
Recovering from /Users/dcrossland/.FontForge/autosave/auto003ec1-1.asfd...  Done
Recovering from /Users/dcrossland/.FontForge/autosave/auto0048b8-1.asfd...  Done
Recovering from /Users/dcrossland/.FontForge/autosave/auto0048cc-1.asfd...  Done
Recovering from /Users/dcrossland/.FontForge/autosave/auto0048d5-1.asfd...  Done
Process 18877 stopped
* thread #1: tid = 0x1c03, 0x00000001003a82df libfontforge.1.dylib`SpiroCP2SplineSet + 316, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
    "frame #0: 0x00000001003a82df libfontforge.1.dylib`SpiroCP2SplineSet + 316
"libfontforge.1.dylib`SpiroCP2SplineSet + 316:
-> 0x1003a82df:  movq   %r14, 24(%r15)
   0x1003a82e3:  incl   %ebx
   0x1003a82e5:  movw   %bx, 34(%r15)
   0x1003a82ea:  movw   %bx, 32(%r15)
(lldb) bt
* thread #1: tid = 0x1c03, 0x00000001003a82df libfontforge.1.dylib`SpiroCP2SplineSet + 316, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
    "frame #0: 0x00000001003a82df libfontforge.1.dylib`SpiroCP2SplineSet + 316
"    "frame #1: 0x00000001003a8678 libfontforge.1.dylib`SSRegenerateFromSpiros + 46
"    "frame #2: 0x000000010004de6c fontforge`CVMouseMoveSpiroPoint + 332
"    "frame #3: 0x0000000100034562 fontforge`CVMouseMove + 2278
"    "frame #4: 0x000000010003050c fontforge`v_e_h + 234
"    "frame #5: 0x00000001005b70f5 libgdraw.4.dylib`_GWidget_Container_eh + 1541
"    "frame #6: 0x000000010060328c libgdraw.4.dylib`dispatchEvent + 5518
"    "frame #7: 0x0000000100600c86 libgdraw.4.dylib`GXDrawEventLoop + 65
"    "frame #8: 0x0000000100126868 fontforge`main + 5982
"    "frame #9: 0x00007fff839227e1 libdyld.dylib`start + 1
"(lldb) q
monkeyiq commented 11 years ago

So this was just going into spiro mode and moving the nodes around a bit? Or was there anything interesting leading up to the crash. Looking on Linux after making about a few 5-6 node open and closed spiro path I can drag the nodes around fine. Mostly trying to work out how to reproduce it.

The bad access at address 0x18 smells like a bad pointer to struct dereference, so it would be great to work out where in the stack null is being passed downwards.

davelab6 commented 11 years ago

On 2 September 2013 01:01, monkeyiq notifications@github.com wrote:

So this was just going into spiro mode and moving the nodes around a bit?

Yes, you can see how I put this into the bundled Mac app at https://github.com/fontforge/libspiro/#in-fontforge

Then I just placed 3 G4 points and then click and dragged a 4th one around, which shows the really crazy spiros are gone, but then it crashed.

http://youtu.be/8jHOApjMxW8

davelab6 commented 11 years ago

Another BT

$ sh ./configure --prefix=/Applications/FontForge.app/Contents/Resources/opt/local/
$ make
$ make install
$ /Applications/FontForge.app/Contents/MacOS/FontForge --debug
Script started on Tue Sep 17 22:33:24 2013
(lldb) error: Aborting reading of commands after command #5: 'run' continued the target.
Executing commands in '/Applications/FontForge.app/Contents/MacOS/debug-script'.
(lldb)  version
LLDB-179.5
(lldb)  settings set frame-format "frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name-with-args}{${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n"
(lldb)  target create /Applications/FontForge.app/Contents/Resources/opt/local/bin/fontforge
Current executable set to '/Applications/FontForge.app/Contents/Resources/opt/local/bin/fontforge' (x86_64).
(lldb)  target select 0
Current targets:
* target #0: /Applications/FontForge.app/Contents/Resources/opt/local/bin/fontforge ( arch=x86_64-apple-macosx, platform=localhost )
(lldb)  run
Process 77683 launched: '/Applications/FontForge.app/Contents/Resources/opt/local/bin/fontforge' (x86_64)
Copyright (c) 2000-2012 by George Williams. See AUTHORS for contributors.

 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

 with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.

 Executable based on sources from 04:15 EST 17-Sep-2013-ML-NoPython-D.

 Library based on sources from 04:15 EST 17-Sep-2013.

 Based on source from git with hash:39e86e01053f0fa81cb73b5ba193e3f9dd046a2a

collabclient_sniffForLocalServer_timer() p:pong

******* have local server!

CVPreserveState() no_windowing_ui:0 maxundoes:120

CVPreserveState() no_windowing_ui:0 maxundoes:120

CVPreserveState() no_windowing_ui:0 maxundoes:120

CVPreserveState() no_windowing_ui:0 maxundoes:120

Process 77683 stopped
* thread #1: tid = 0x1c03, 0x00000001004706d8 libfontforge-2.0.0_beta1.dylib`SpiroCP2SplineSet + 344, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
    "frame #0: 0x00000001004706d8 libfontforge-2.0.0_beta1.dylib`SpiroCP2SplineSet + 344
"libfontforge-2.0.0_beta1.dylib`SpiroCP2SplineSet + 344:
-> 0x1004706d8:  movq   %r15, 24(%r14)
   0x1004706dc:  incl   %ebx
   0x1004706de:  movw   %bx, 34(%r14)
   0x1004706e3:  movw   %bx, 32(%r14)
(lldb) tbbt

* thread #1: tid = 0x1c03, 0x00000001004706d8 libfontforge-2.0.0_beta1.dylib`SpiroCP2SplineSet + 344, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
    "frame #0: 0x00000001004706d8 libfontforge-2.0.0_beta1.dylib`SpiroCP2SplineSet + 344
"    "frame #1: 0x0000000100470b0e libfontforge-2.0.0_beta1.dylib`SSRegenerateFromSpiros + 46
"    "frame #2: 0x0000000100073c89 libfontforgeexe-2.0.0_beta1.dylib`CVMouseDownPoint + 1241
"    "frame #3: 0x00000001000546e6 libfontforgeexe-2.0.0_beta1.dylib`v_e_h + 2646
"    "frame #4: 0x00000001006d124e libgdraw-2.0.0_beta1.dylib`_GWidget_Container_eh + 1870
"    "frame #5: 0x000000010071a75d libgdraw-2.0.0_beta1.dylib`dispatchEvent + 5789
"    "frame #6: 0x0000000100717d25 libgdraw-2.0.0_beta1.dylib`GXDrawEventLoop + 85
"    "frame #7: 0x000000010017414b libfontforgeexe-2.0.0_beta1.dylib`fontforge_main + 6923
"    "frame #8: 0x000000010000ff24 fontforge`start + 52
"(lldb) q

Script done on Tue Sep 17 22:33:59 2013
JoesCat commented 11 years ago

How about now?

JoesCat commented 11 years ago

On September 23, 2013 04:08:52 AM Dave Crossland wrote:

Ah, ignore that, its an older version of FF with the latest libspiro.

This last fix was all on the FontForge side and the older FontForge would have needed these similar changes.

I haven't tried the older FontForge with older libspiro recently, but I ithink the combination might not have been as stable.

I still managed one or two segfaults with this last update, but I believe the fix for that (whatever it is) would also need to be on the FontForge side as well.

JoesCat commented 11 years ago

Both SpiroCP2SplineSet() and SSRegenerateFromSpiros() fixed in FontForge. There is another segfault issue, but it's also Fontforge related. Consider this bug fixed and closed.

fotografi commented 8 years ago