2012年8月30日木曜日

Malformed permissions property: 'langid' 対策

(臨時修正版:https://drive.google.com/open?id=1C6mmykeZD4LCpTzvEp272PDgOwrE_c0B

Windows 8又はWindows Server 2012に、PostgreSQL 8.2 の導入を試みると、失敗するようです。

次の様なエラーメッセージが表示されます。

Malformed permissions property: 'langid'

原因を特定致しました。

未初期化の変数に対する読み取りアクセスが原因のようです。(これは、PostgreSQL側に問題が有ります。Windows側の問題では有りません。)

修正ファイル編:

mstファイル置き場へのリンクを設置致します。使用方法につきましては、各人にて調査され、対処してください。自己責任でお願いいたします:
https://sites.google.com/site/kaihatsublog/pginstca

分析編:

次にコードを示します。(pgFoundary/pginstaller/pginst/ca/pginstca.cファイル中、RunInitdbから抜粋しています)

 serverdir = strchr(langid,';');
 if (!datadir)
 {
  SendErrorMessage(hInstall,L"Malformed permissions property: 'langid'.");
  return ERROR_INSTALL_FAILURE;
 }

serverdirに書き込んでいるのに、datadirを読み取っています。

Windows 8以前では、未使用のスタックが汚れていた(?)ため、発現しなかったようですが、
Windows 8以遠では、未使用のスタックを0で掃除する(?)ようになったため、発現するようです。

この問題は8.2以降で修正されていますが、8.2系列には補修が適用されていないようです。

Orca及びOllyDbg v2.01 (beta 2)の力を借り、解析しました所、次の様になっています。


そこでパッチを当てました。pginstca 3758 EC F0

Stirlingでパッチを適用し、Orcaで書き戻した所、セットアップが成功するようになりました。

2012年8月24日金曜日

IIS6で、CGIアプリが致命的なエラーになった場合

SetErrorMode

私のWindows 7パソコンにて実行した場合: 0

  • 0
  • システム既定の処理を行い、どの場合でもエラーダイアログボックスを表示します。

IIS6のCGIにて実行した場合: 32769

  • 1
  • SEM_FAILCRITICALERRORS
  • システムは、致命的なエラーに関するメッセージボックスを表示せず、呼び出し側プロセスへそのエラーを送信します。

  • 32768
  • SEM_NOOPENFILEERRORBOX
  • システムは、ファイルが見つからなかった場合にメッセージボックスを表示せず、呼び出し側プロセスへそのエラーを返します。


SetErrorModeの初期値が異なる、という事でございますが…

SEM_FAILCRITICALERRORSの件の

呼び出し側プロセスへそのエラーを送信しますって怖くないでしょうか?

子プロセスで0xC0000005(アクセス違反)が発生したら、
親プロセスも0xC0000005(アクセス違反)で、強制終了を喰らうという事でしょうか??



次の様なこういう構成なのですが、

親プロセス=CMD.exe
子プロセス=COM/OLEを使って実現している、サムネイル生成用の物

親プロセスまで0xC0000005が伝播している事例を、今までに見たことがあるような、そんな気がしています。