未定義のオフセット:0 in> […] /wp-includes/capabilities.php 1067行目


8

ローカルホストのセットアップでこのエラーメッセージが表示されますが、Genesis Frameworkが有効になっている場合のみです。WordPress Twenty Elevenは問題なく動作します。これは、新しい投稿を作成するときに発生します。ページを更新するとエラーが繰り返されますが、投稿自体が作成され、すべてが正常に行われているようです。

誰がこれを引き起こしているのか知っていますか?

Notice: Undefined offset: 0 in /var/www/secret/htdocs/wp-includes/capabilities.php on line 1067
Notice: Undefined offset: 0 in /var/www/secret/htdocs/wp-includes/capabilities.php on line 1067
Warning: Cannot modify header information - headers already sent by (output started at /var/www/secret/htdocs/wp-includes/capabilities.php:1067) in /var/www/secret/htdocs/wp-includes/pluggable.php on line 876

新しくインストールされた、変更されていないGenesis Frameworkです。

回答:


12

創世記のバグを発見しました。

Xdebugスタックトレースは、追加の引数を必要とする単一の機能(edit_postおよびedit_page)を使用しgenesis_save_custom_fields()て呼び出す関数として、current_user_can()原因を特定します。

current_user_can()通話has_cap()の通話map_meta_cap()機能名のswitch文を行います。capabilities.phpの1067行目を参照してください。2つの未定義のオフセット通知は、Genesisのcurrent_user_can呼び出しに投稿IDがないため、配列ではない$ args [0]からのものです。

Cannot modify header information - headers already sent警告はXdebugのPHPからの通知をプリントアウトしています。実際には、Xdebugを使用していない場合、ログを確認しない限り、PHP通知も表示されません。エラーはsave_postに添付された関数にあり、ページが更新されて警告/通知/エラーがページに表示されないためです。 WP_DEBUGがtrueに設定されていても。

修正:

lib / functions / options.phpの234行目を変更します。

/** Check the user allowed to edit the post or page */
if ( ( 'page' == $post->post_type && ! current_user_can( 'edit_page' ) ) || ! current_user_can( 'edit_post' ) )
    return;

に:

/** Check the user allowed to edit the post or page */
if ( ! current_user_can( 'edit_post', $post->ID ) )
    return;

またedit_pageedit_postキャップとキャップは交換可能であるため、post_typeを確認する必要はありません。


ローカルホストapache2(xdebugなし)をテストしているときにラップトップでエラーが発生しなかった理由を説明するああ。これを深く掘り下げてくれてありがとう、私はこのすべての「複雑な」ものに少し圧倒されました;)創世記でさまざまなバグを見つけました。もちろん、xdebugとWP_DEBUGでこれをテストするはずです。たとえば、ジェネシスでesc_htmlが見つからないことがわかりました。彼らはwpコア開発者Mark Jaquirthに何度もセキュリティ監査を実施し、セキュリティの安全性について彼の想定される引用を使って宣伝します。GenesisFrameworkの全体的な品質に疑問を投げかけます
James Mitch

0

これは、1.17のトランクで、Mark Jaquithの監査で修正されました。1.9.2リリースのチケットを提出しました。

個人的には、map_meta_cap()は$ args [0]をチェックまたはサニタイズしないため、これはWordPressの問題であると私は思います。そのため、結果としてWordPressコアにチケットを送信しました。


「1.17のトランク」って何?ジェネシス1.1.7?なぜそれが1.9.1になっているのですか?そして、たとえそれがワードプレスの問題であったとしても、ページロードを完全に停止する迷惑なエラーなしには投稿できないフレームワークを安定版としてリリースします。WTF?@Chris_Oは、引数を指定することで簡単に修正できることを上記で説明しました。§post-> IDの代わりに$ post_idをとりました。これは、ジェネシス関数の場合の引数でもあり、これが賢明かどうかわからないためです。また、これを減らしif ( ! current_user_can( 'edit_post', $post_id ) )て他のものをスキップすることが適切で安全かどうかも知りたいです。。
James Mitch

投稿のような単純なアクション(WP_DEBUGとxdebugを使用)が開発者にとって通常の手順であるかどうかをテストすることなく安定してリリースすることを意味しますか?私はこれについての専門家ではありませんが、彼らがそうしていなければ、それが間違っているのです。言うまでもなく、それらは自称「ワードプレスフレームワークの業界標準」です。スタックオーバーフローで2人の人(私と@Chris_O)が安っぽいコードを検出して修正してはいけません
James Mitch

申し訳ありませんが、ワードプレスコアのせいにしないでください。これの下にあるコアバグであっても、そうではありません。また、2つの理由で、esc_htmlが見つからないというセキュリティホールがどこにあったかはわかりません。1.貧しいサイト所有者を危険にさらしたくない!2. $ 80以上でそれを見つける彼らの仕事!実際、何年も前に修正する必要があります!これを支払う代わりにgithubからダウンロードしてよかったです。
James Mitch

ジェームズ、すごい。それはかなりの怒りです。最初に、ジェネシスは通常の手順としてWP_DEBUGでテストされます。修正としてコアにコミットされたと述べたとき、1月17日にコミットされました。さらに、Jaquithが指摘したように、GenesisやWordPressのセキュリティ上の欠陥ではありません。
Travis Smith

それで、私が言ったように、この信じられないほど簡単に検出できるエラーを検出できなかった理由が実行を停止し、投稿エディターにリダイレクトせずに、投稿やページの操作を行うたびに、異常なxdebugメッセージを凝視できなかった理由を彼らがチェックしたかどうかを教えてください。彼らはそれを「テスト」したと思いますが、彼らのテストの手順はROFLMAOの投稿の編集や編集には関与していません。あなたが望むものを言い、あなたが望むようにそれらを守ってください(理由は非常に偏見があるため)彼らがポッパーテストに失敗したのは事実です!
James Mitch、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.