Ticket #573 (closed バグ指摘: 修正済)

Opened 12 years ago

Last modified 11 years ago

SC_Query#insert DBエラー時無限ループ

Reported by: Seasoft Owned by: nanasess
Priority: Milestone: EC-CUBE2.5.0alpha
Component: その他 Version: コミュニティ (eccube-comu)
Keywords: Cc:
修正済み:

Description

現状詳細を把握できていませんが、SC_Query#insert でDB周りのエラーが発生すると、無限ループするようです。

  • 正式版 2.4.1 / PostgreSQL
  • コミュニティ / PostgreSQL / PHP 5.2.9

スタックトレース

#TimeMemoryFunctionLocation
10.0003100200{main}( )../product.php:0
20.13115591192LC_Page_Admin_Products_Product_Ex->process( )../product.php:34
30.13115591192LC_Page_Admin_Products_Product->process( )../LC_Page_Admin_Products_Product_Ex.php:56
40.13765651616LC_Page_Admin_Products_Product->lfRegistProduct( )../LC_Page_Admin_Products_Product.php:170
50.15245689608LC_Page_Admin_Products_Product->lfInsertProductClass( )../LC_Page_Admin_Products_Product.php:504
60.15435689608SC_Query->insert( )../LC_Page_Admin_Products_Product.php:815
70.15455690100SC_DbConn->query( )../SC_Query.php:268
80.15665705484SC_DbConn->send_err_mail( )../SC_DbConn.php:84
90.15865786368LC_Page_Error_SystemError_Ex->init( )../SC_DbConn.php:219
100.15865786368LC_Page_Error_SystemError->init( )../LC_Page_Error_SystemError_Ex.php:48
110.15865786368LC_Page_Error->init( )../LC_Page_Error_SystemError.php:55
120.15865786368LC_Page->init( )../LC_Page_Error.php:62
130.15875786524SC_Helper_PageLayout->sfGetPageLayout( )../LC_Page.php:87
140.15875787296SC_Helper_PageLayout->lfgetPageData( )../SC_Helper_PageLayout.php:58
150.15885789640SC_Query->select( )../SC_Helper_PageLayout.php:161
160.15885790152SC_DbConn->getAll( )../SC_Query.php:92
170.16045818760SC_DbConn->send_err_mail( )../SC_DbConn.php:171
180.16055819228LC_Page_Error_SystemError_Ex->init( )../SC_DbConn.php:219
190.16055819228LC_Page_Error_SystemError->init( )../LC_Page_Error_SystemError_Ex.php:48
200.16055819228LC_Page_Error->init( )../LC_Page_Error_SystemError.php:55
210.16055819228LC_Page->init( )../LC_Page_Error.php:62

Change History

comment:1 Changed 12 years ago by Seasoft

  • Summary changed from SC_Query#insert to SC_Query#insert DBエラー時無限ループ

comment:2 Changed 12 years ago by nanasess

おそらく, エラー画面を表示させる際に DB 接続を行ってしまい, それがエラーとなって, またエラー画面... といった状況に陥っているのではないでしょうか.

#567 で, エラーハンドリングの修正を試みています.

set_error_handler で, DB 接続に依存しないエラー画面を定義しておき, DB エラーが発生した場合は trigger_error でエラーをスローさせるのが良いかなぁと思っています.

comment:3 Changed 11 years ago by nanasess

  • Owner changed from somebody to nanasess
  • Status changed from new to assigned

comment:4 Changed 11 years ago by nanasess

以下のように対応しようと思います

  • data/require_base.php の中で, DB アクセスを伴うクラスと, 伴わないクラスを分離
  • DB アクセスを伴わない data/require_nondb.php を作成
  • エラーページでは, data/require_nondb.php を require する
  • SC_Inital.php で set_error_handler を定義
  • SC_DbConn のエラーハンドリングを trigger_error で行う

comment:5 Changed 11 years ago by nanasess

set_error_handler では Fatal Error は補足できないようなので, ob_start で捕捉するのが良さそうです.

参考

comment:6 Changed 11 years ago by nanasess

r18500 で version-2_4-dev へコミット. set_error_handler を定義し, SC_DbConn のエラーハンドリングを trigger_error を使用するように修正.

これで, 少なくとも無限ループは解消できるはず...

comment:7 Changed 11 years ago by nanasess

r18538 で comu-ver2 へコミット. 問題なければ, version-2_4 にもマージしようと思います.

comment:8 Changed 11 years ago by kajiwara

  • Milestone changed from EC-CUBE2.4.3 to EC-CUBE2.4.4

こちらですが、もう少し確認が必要かと思いますので、次期バージョンにマイルストーンを変更させていただきたいと思います。

申し訳ございませんが、よろしくお願いいたします。

comment:9 Changed 11 years ago by nanasess

影響が大きそうですので、 milestone:EC-CUBE2.5.0 へ変更します

comment:10 Changed 11 years ago by nanasess

  • Milestone changed from EC-CUBE2.4.4 to EC-CUBE2.5.0

comment:11 Changed 11 years ago by Seasoft

  • Version changed from 2.4.1 to コミュニティ (eccube-comu)

2.4系での対応は難しいと思いますので、コミュニティ版で動作確認します。

comment:12 Changed 11 years ago by Seasoft

  • Status changed from assigned to closed
  • Resolution set to 修正済

本件問題が発生しなくなっていることを確認しました。

エラー時の動作が不十分に感じる部分はありますが、本件の範疇を超えますので、#567 辺りでの継続対応と考えています。

Note: See TracTickets for help on using tickets.