3

正しくインストールされているCrypt::RSAを使用する非常に大規模なCGIアプリケーションに取り組んでいます。組み込みライブラリを実行しようとすると、「関数としてnull参照を呼び出そうとしました」タイプのエラーが発生します(リリース日のロールバックが必要だったため、現在、正確なエラーを取得するために戻ることはできません)。 。Crypt::RSAのコンストラクターへのnull参照をトレースします。このコンストラクターはClass::Loaderを使用してCrypt::RSA :: ES::OAEPを有効にします。

クラスローダーを「use」と「new」に置き換えました。ライブラリはまだ多くの点で失敗していますが、その部分は正常に機能します。明らかに、私の環境に何か問題があります。何なのかよくわかりません。誰かが私にリードを与えることができますか?

4

1 に答える 1

2

わかりました、12時間掘り下げた後、これが機能しました。

これが何が起こっていたかです(理由ではありません)。eval()引用符で囲まれたuseorステートメントを呼び出したときはいつでもrequire(Class::Loader で発生しますが、Crypt:: フレームワークの他の場所でも発生します)、別の方法で Perl クラスパスとして含まれていたパスを認識できませんでした。引用されているほとんどの use/require オブジェクトは単にクラスがそこにあると想定しているため、有用なエラーはほとんど出されませんでした。eval ブロッ​​クの外側のファイルにダンプ@INCすると、すべてがそこに存在します。

皮肉なことに、開発とステージングで同じセットアップを使用しましたが、開発では機能しましたが、ステージングでは機能しませんでした。また、FindBin (CGI で使用するべきではないことはわかっていますが、Crypt で使用されます) はステージングでは /dev/null について上下に揺れていましたが、開発ではそうではありませんでした。

バージョンやグローバル構成を簡単に比較できないので、ここで私の探求は終わりです。

Crypt::RSA で自分自身の問題をどのように解決したかというと、FindBin に関連付けられているすべてのコマンドを無効にしrequir、私のコードがアクセスする可能性のあるすべてのものに対して e 参照をハードコーディングすることでした。Crypt::RSA::ES::OAEP の Crypt::RSA と Crypt::Random::Provider::rand の Crypt::Random::Generator で require を行いました

これが将来問題を抱えている人に役立つことを願っています。その理由を提案できる人は誰でも返信してください。投稿を完了するために追加します.

于 2009-01-14T18:38:33.807 に答える