フィールド化バッファのブール式のデバッグ


以前の SIGFPE 爆弾について説明しました. C 関数のリストを見ていくと、構文解析された式ツリーを出力する Fboolpr32 関数を思い出しました. 10分後、それを Python Tuxedo library に追加しました. SIGFPE 爆弾をもう一度見てみましょう.

>>> import tuxedo as t
>>> t.Fboolev32({"TA_STATUS": "OK123"}, "TA_STATUS %! 'OK.*'")
Floating-point exception



これで、Oracle Tuxedo によってどのように解析されたかを調査して検証できます.

>>> t.Fboolpr32("TA_STATUS %! 'OK.*'", sys.stdout)
( ( TA_STATUS[0] ) % ( ! ( 'OK.*' ) ) )



実際、これは % モジュロ演算および ! 否定として解釈されます.そして、これが開発者が書くつもりだったものです:

>>> t.Fboolpr32("TA_STATUS !% 'OK.*'", sys.stdout)
( ( TA_STATUS[0] ) !% ( 'OK.*' ) )



追記my Open Source replacement of Oracle TuxedoFboolpr32 関数も実装しました