Décalage indéfini: 0 dans> […] /wp-includes/capabilities.php sur la ligne 1067

8

Hé, je reçois ce message d'erreur sur ma configuration localhost, mais uniquement avec Genesis Framework activé; WordPress Twenty Eleven fonctionne très bien. Cela se produit lorsque je veux créer un nouveau message. Si je rafraîchis la page, l'erreur se répétera, mais le message lui-même est créé et tout semble aller bien.

Est-ce que quelqu'un sait ce qui cause cela?

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

Il s'agit d'un framework Genesis nouvellement installé et non modifié.

James Mitch
la source

Réponses:

12

Vous avez trouvé un bug dans Genesis.

Votre trace Xdebug empile le coupable comme la genesis_save_custom_fields()fonction qui appelle current_user_can()avec une capacité singulière (edit_post et edit_page) qui nécessite également un argument supplémentaire, dans ce cas l'ID de publication qui manque.

current_user_can()appels has_cap()qui appelle map_meta_cap()qui fait une instruction switch sur le nom de la capacité. Voir la ligne 1067 de capabilities.php . Les 2 avis de décalage indéfinis proviennent de $ args [0] qui n'est pas un tableau car l'ID de publication est manquant dans l'appel current_user_can dans Genesis.

Les Cannot modify header information - headers already sentavertissements proviennent de Xdebug qui imprime les avis PHP. En fait, si vous n'utilisiez pas Xdebug, vous ne verriez même pas les notifications PHP à moins que vous n'ayez vérifié vos journaux car l'erreur se trouve dans une fonction attachée à save_post et la page est actualisée, ce qui empêche les avertissements / notifications / erreurs d'être affichés sur la page même avec WP_DEBUG défini sur true.

Réparer:

Sur la ligne 234 du changement de lib / functions / options.php:

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

A noter également, il n'est pas nécessaire de vérifier le post_type car les capuchons edit_pageet edit_postsont interchangeables.

Chris_O
la source
Ah cela explique pourquoi je n'ai pas eu d'erreurs sur mon ordinateur portable lors du test de localhost apache2 (sans xdebug) ni sur un hébergeur je l'ai testé. Merci d'avoir creusé si profondément dans ce que j'étais un peu dépassé par toutes ces choses "compliquées";). J'ai trouvé divers bugs dans la genèse maintenant, ils sont censés le tester avec xdebug et WP_DEBUG bien sûr. Par exemple, a trouvé un esc_html manquant dans la genèse. Ils ont payé le développeur principal wp Mark Jaquirth pour l'audit de sécurité plusieurs fois, la publicité avec des citations supposées de lui disant à quel point il est sécurisé, je remets maintenant en question la qualité globale du cadre Genesis
James Mitch
0

Cela a été corrigé dans le coffre le 1.17 par Mark Jaquith dans son audit. J'ai soumis un ticket pour une éventuelle version 1.9.2.

Personnellement, je pense que c'est un problème WordPress car map_meta_cap () ne vérifie ni ne désinfecte $ args [0]. J'ai donc soumis un ticket à WordPress core en conséquence.

Travis Smith
la source
"tronc sur 1.17" quoi? genèse 1.1.7? Pourquoi est-il alors en 1.9.1? Et même si c'est un problème wordpress, ils libèrent un framework aussi stable où vous ne pouvez même pas poster sans une erreur ennuyeuse qui arrête complètement la charge de page. WTF? @Chris_O a expliqué ci-dessus que son peut facilement être fixé simplement en lui donnant l'argument. J'ai pris $ post_id au lieu de §post-> ID parce que c'est aussi un argument si la fonction de genèse, je ne sais pas si c'est sage, aussi je suis curieux de savoir si c'est juste et sûr de réduire cela à juste if ( ! current_user_can( 'edit_post', $post_id ) )et d'ignorer les autres .
James Mitch
Je veux dire le libérer comme stable sans même tester si faire une action simple comme un post (avec WP_DEBUG et xdebug) devrait être une procédure normale pour les développeurs ou non? Je ne suis pas un expert en la matière, mais je dirais que s'ils ne le font pas mal. Sans oublier qu'ils sont la «norme industrielle autoproclamée des frameworks wordpress». Il ne devrait pas y avoir 2 gars en débordement de pile (moi et @Chris_O) détectant et corrigeant leur code merdique!
James Mitch
Et désolé, mais ne blâmez pas cela sur le noyau wordpress! Ce n'est pas le cas , même s'il s'agit d'un bogue de base se trouvant en dessous. Et je ne dirai pas où j'ai trouvé le trou de sécurité d'un esc_html manquant pour 2 raisons. 1. ne pas vouloir risquer les propriétaires de sites pauvres! 2. c'est leur travail de le trouver pour 80 $ +! En fait, il devrait être corrigé il y a des années! Heureux de l'avoir téléchargé depuis github au lieu de payer pour cela.
James Mitch
James, wow. Ça fait beaucoup de colère. Tout d'abord, Genesis est testé avec WP_DEBUG comme procédure normale. Lorsque j'ai remarqué qu'il avait été validé pour le noyau en tant que correctif, il a été validé le 17 janvier. De plus, ce n'est pas une faille de sécurité dans Genesis ou dans WordPress comme l'a noté Jaquith.
Travis Smith
Alors, dites-moi s'ils l'ont vérifié pourquoi l'échec de la détection de cette erreur incroyablement facile à détecter qui, comme je l'ai dit, arrête l'exécution, ne vous redirige pas vers l'éditeur de publication vous permettant de regarder un message xdebug flippant à chaque fois que vous publiez des éléments / pages? Permettez-moi de deviner qu'ils l'ont "testé" mais leur précédent test n'impliquait pas de faire ou de modifier un post ROFLMAO! Dites ce que vous voulez, défendez-les comme vous le souhaitez (car les couse sont extrêmement biaisés) c'est un fait qu'ils ont échoué aux tests popper!
James Mitch