2017-09-15 3 views
0

Python2.7とwxpython-3.0-gtk2で書かれたTaskCoach-1.4.3を使用します。元のコードに変更はありませんでした。私は2年以上使用しましたが、ある日、それは奇妙なエラーで動作を停止しました。wxpython、wx-3.0-gtk2に関する奇妙な問題。 C++アサーション "IsOk()"が失敗しました

Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `gtk-primary-button-warps-slider' of type `gboolean' from rc file value "((GString*) 0x5d546b17a0)" of type `gboolean' 
Traceback (most recent call last): 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/artprovider.py", line 62, in CreateBitmap 
    return self._CreateBitmap(artId, artClient, size) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/artprovider.py", line 69, in _CreateBitmap 
    bitmap = icons.catalog[catalogKey].getBitmap() 
    File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/lib/embeddedimage.py", line 48, in GetBitmap 
    return wx.BitmapFromImage(self.GetImage()) 
    File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/_gdi.py", line 884, in BitmapFromImage 
    val = _gdi_.new_BitmapFromImage(*args, **kwargs) 
wx._core.PyAssertionError: C++ assertion "image.IsOk()" failed at /var/tmp/portage/x11-libs/wxGTK-3.0.2.0-r2/work/wxPython-src-3.0.2.0/src/gtk/bitmap.cpp(626) in wxBitmap(): invalid image 
persons_icon 
Traceback (most recent call last): 
    File "/home/user/bin/tasker", line 72, in <module> 
    start() 
    File "/home/user/bin/tasker", line 63, in start 
    app = application.Application(options, args) 
    File "/home/user/bin/taskcoach/taskcoachlib/patterns/singleton.py", line 29, in __call__ 
    class_.instance = super(Singleton, class_).__call__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/application/application.py", line 117, in __init__ 
    self.init(**kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/application/application.py", line 226, in init 
    self.settings, splash=splash) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/mainwindow.py", line 68, in __init__ 
    self._create_window_components() # Not private for test purposes 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/mainwindow.py", line 140, in _create_window_components 
    viewer.addViewers(self.viewer, self.taskFile, self.settings) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/factory.py", line 45, in __init__ 
    self.__add_all_viewers() 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/factory.py", line 49, in __add_all_viewers 
    self.__add_viewers(task.TaskViewer) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/factory.py", line 66, in __add_viewers 
    **self._viewer_kwargs(viewer_class)) 
    File "/home/user/bin/taskcoach/taskcoachlib/patterns/metaclass.py", line 39, in __call__ 
    instance = super(NumberedInstances, cls).__call__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 877, in __init__ 
    super(TaskViewer, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 383, in __init__ 
    super(SortableViewerForTasksMixin, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 323, in __init__ 
    super(ManualOrderingMixin, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 208, in __init__ 
    super(SortableViewerMixin, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 703, in __init__ 
    super(ViewerWithColumns, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 136, in __init__ 
    super(BaseTaskTreeViewer, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 77, in __init__ 
    super(BaseTaskViewer, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 85, in __init__ 
    super(FilterableViewerMixin, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 583, in __init__ 
    super(TreeViewer, self).__init__(*args, **kwargs) 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 63, in __init__ 
    self.widget = self.createWidget() 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 912, in createWidget 
    imageList = self.createImageList() # Has side-effects 
    File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 191, in createImageList 
    imageList.Add(wx.ArtProvider_GetBitmap(image, wx.ART_MENU, size)) 
    File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/_gdi.py", line 6735, in Add 
    return _gdi_.ImageList_Add(*args, **kwargs) 
wx._core.PyAssertionError: C++ assertion "IsOk()" failed at /var/tmp/portage/x11-libs/wxGTK-3.0.2.0-r2/work/wxPython-src-3.0.2.0/src/gtk/bitmap.cpp(923) in GetWidth(): invalid bitmap 

また、GUIのエラーメッセージが表示されます。

IDAT: chunk data is too large 
07:11:19: Couldn't load a PNG image - file is corrupted or not enough memory. 
07:11:19: Unknown image data format. 

私はホームディレクトリからすべてのデータを削除し、(私はgentooの使用)のwxWidgetsとwxPythonのを再コンパイルしようとした、と公式サイトのtaskcoachから再度ダウンロードします.org。何も助けなかった。それが働くのを助けてください。

+0

このpng画像はOKですか?他のアプリで読むことができますか? – Ripi2

+0

@Ural、pngライブラリをアップグレードしましたか?システムをアップグレードしましたか? GTK +?不正な形式のpngを読んでいる切符がありましたが、私はそれがずっと前に修正されたと信じています。 – Igor

+0

要求するpngイメージが見つかりません。私はアプリのバージョンが同じで、それをもう一度ダウンロードしたので、それはアプリに付属していると仮定し、うまくいくはずです。 @igor、はい、私は通常、システムを更新し、いくつかのアップデートを受け取ったかもしれませんが、通常、アップデートはバグを修正するためのものであり、追加するものではありません。私は 'emerge -av gtk + pygtk libpng wxGTK wxpython'を再コンパイルしようとしましたが、それでも失敗します... – Ural

答えて

0

私はその理由を見つけました。 https://sourceforge.net/p/libpng/bugs/270/?limit=25

私はlibpngを1.6.29にダウングレードし、問題は修正されました。彼らはまた、gitのバージョンで修正がありますが、まだ新しいバージョンが発行されていません。

のlibpng-1.6.32 pngrutil.cにおけるIDATチャンクの最大の合理的なサイズを計算する試み:png_check_chunk_length()、データを仮定すると思われるがZLIBまたはいくつかの他の「合理的な」コンプレッサにより生成されました最小限のオーバーヘッドでデータを出力します。しかし、PNG標準では、このような要件は含まれておらず、実際にhttps://www.w3.org/TR/PNG/セクション15.2.3(k)は、準拠しているデコーダは完全な画像データがいくつかのIDATチャンクに格納されている単一の圧縮されたデータストリームによって表されます。

gitブランチlibpng16で修正されました。テストしてください。これは、IDATの上限を大きく設定し、行ごとにバッファを収めることができます。また、PNG_USER_CHUNK_MALLOC_MAXユーザー制限を使用するため、ユーザーは必要に応じてさらに大きな制限を設定できます。

関連する問題