Undefinierter Offset: 0 in> […] /wp-includes/capabilities.php in Zeile 1067

8

Hey, ich erhalte diese Fehlermeldungen in meinem localhost-Setup, jedoch nur mit aktiviertem Genesis Framework. WordPress Twenty Eleven funktioniert gut. Dies passiert, wenn ich einen neuen Beitrag erstellen möchte. Wenn ich die Seite aktualisiere, wird der Fehler wiederholt, aber der Beitrag selbst wird erstellt und alles scheint in Ordnung zu sein.

Weiß jemand, was das verursacht?

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

Es ist ein neu installiertes, unverändertes Genesis Framework.

James Mitch
quelle

Antworten:

12

Sie haben einen Fehler in Genesis gefunden.

Ihr Xdebug-Stack-Trace fingert den Täter als die genesis_save_custom_fields()Funktion, die current_user_can()mit einer singulären Funktion (edit_post und edit_page) aufruft, für die auch ein zusätzliches Argument erforderlich ist, in diesem Fall die fehlende Post-ID.

current_user_can()ruft auf, has_cap()was aufruft, map_meta_cap()was eine switch-Anweisung für den Fähigkeitsnamen ausführt. Siehe Zeile 1067 von functions.php . Die 2 undefinierten Offset-Benachrichtigungen stammen von $ args [0], was kein Array ist, da die Post-ID im Aufruf current_user_can in Genesis fehlt.

Die Cannot modify header information - headers already sentWarnung stammt von Xdebug und druckt die PHP-Hinweise aus. Wenn Sie Xdebug nicht verwenden, werden die PHP-Hinweise nur angezeigt, wenn Sie Ihre Protokolle überprüft haben, da der Fehler in einer an save_post angehängten Funktion liegt und die Seite aktualisiert wird, wodurch verhindert wird, dass Warnungen / Hinweise / Fehler auf der Seite angezeigt werden auch wenn WP_DEBUG auf true gesetzt ist.

Fix:

In Zeile 234 von lib / functions / options.php ändern:

/** 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;

Zu:

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

Beachten Sie auch, dass der post_type nicht überprüft werden muss, da die edit_pageund -Caps edit_postaustauschbar sind.

Chris_O
quelle
Ah, das erklärt, warum ich beim Testen von localhost apache2 (ohne xdebug) keine Fehler auf meinem Laptop bekommen habe, auch nicht auf einem Webhost, den ich getestet habe. Danke, dass du dich so tief damit beschäftigt hast, dass ich ein bisschen überwältigt war von all dem "komplizierten" Zeug;). Ich habe jetzt verschiedene Fehler in der Genesis gefunden, sie sollen dies natürlich mit xdebug und WP_DEBUG testen. Zum Beispiel eine fehlende esc_html in Genesis gefunden. Sie bezahlten den wp-Kernentwickler Mark Jaquirth für die mehrfache Sicherheitsüberprüfung und machten Werbung mit angeblichen Zitaten von ihm, wie sicher es ist. Ich frage jetzt die Gesamtqualität des Genesis Frameworks
James Mitch
0

Dies wurde im Kofferraum am 1.17 von Mark Jaquith in seiner Prüfung behoben. Ich habe ein Ticket für eine mögliche Version 1.9.2 eingereicht.

Persönlich glaube ich, dass dies ein WordPress-Problem ist, da map_meta_cap () $ args [0] nicht überprüft oder bereinigt. Daher habe ich ein Ticket an WordPress Core gesendet.

Travis Smith
quelle
"Kofferraum auf 1.17" was? Genesis 1.1.7? Warum ist es dann in 1.9.1? Und selbst wenn es sich um ein WordPress-Problem handelt, veröffentlichen sie ein Framework als stabil, in dem Sie nicht einmal ohne einen nervigen Fehler posten können, der das Laden von Seiten vollständig stoppt. WTF? @Chris_O erklärte oben, dass es einfach behoben werden kann, indem man ihm das Argument gibt. Ich habe $ post_id anstelle von §post-> ID genommen, weil es auch ein Argument ist, wenn die Genesis-Funktion funktioniert. Ich weiß nicht, ob dies sinnvoll ist. Ich bin auch neugierig, ob es richtig und sicher ist, dies auf gerecht zu reduzieren if ( ! current_user_can( 'edit_post', $post_id ) )und die anderen zu überspringen .
James Mitch
Ich meine, es als stabil freizugeben, ohne zu testen, ob eine einfache Aktion wie ein Beitrag (mit WP_DEBUG und xdebug) ein normales Verfahren für Entwickler sein sollte oder nicht. Ich bin kein Experte in diesem Bereich, aber ich würde sagen, wenn sie es nicht tun, machen sie es falsch. Ganz zu schweigen davon, dass sie der selbsternannte "Industriestandard für WordPress-Frameworks" sind. Es sollten nicht 2 Leute im Stapelüberlauf sein (ich und @Chris_O), die ihren beschissenen Code erkennen und reparieren!
James Mitch
Und sorry, aber bitte beschuldigen Sie nicht den WordPress-Kern! Es ist nicht so , auch wenn es sich um einen Kernfehler handelt, der darunter liegt. Und ich werde aus zwei Gründen nicht sagen, wo ich die Sicherheitslücke eines fehlenden esc_html gefunden habe. 1. Ich möchte keine armen Websitebesitzer riskieren! 2. Es ist ihre Aufgabe, es für $ 80 + zu finden! In der Tat sollte es vor Jahren behoben werden! Ich bin froh, dass ich es von Github heruntergeladen habe, anstatt dafür zu bezahlen.
James Mitch
James, wow. Das ist viel Ärger. Zunächst wird Genesis wie gewohnt mit WP_DEBUG getestet. Als ich feststellte, dass es als Fix für den Kern festgelegt wurde, wurde es am 17. Januar festgelegt. Darüber hinaus handelt es sich nicht um eine Sicherheitslücke in Genesis oder WordPress, wie von Jaquith festgestellt.
Travis Smith
Sagen Sie mir also, ob sie es überprüft haben, warum sie diesen unglaublich einfach zu erkennenden Fehler nicht erkannt haben, der, wie ich bereits sagte, die Ausführung stoppt und Sie nicht zum Post-Editor umleitet, sodass Sie jedes Mal, wenn Sie Post- / Seiten-Sachen machen, die verdammte xdebug-Nachricht anstarren können? Lassen Sie mich raten, dass sie es "getestet" haben, aber ihre Testvorgabe beinhaltete nicht das Erstellen oder Bearbeiten eines Beitrags ROFLMAO! Sagen Sie, was Sie wollen, verteidigen Sie sie, wie Sie wollen (weil sie extrem voreingenommen sind). Es ist eine Tatsache, dass sie den Popper-Test nicht bestanden haben!
James Mitch