[Resolved] Infinite loop when posting group activity comment
-
Under certain circumstances, there is an infinite loop inside the
bp_legacy_theme_new_activity_comment()
function. Specifically, when all of thesecondary_item_id
fields are zero, the$parent_id
will continually be set to zero. An infinite loop ensues and eventually the script will time out. This causes new activity items to not display until the page is refreshed, as mentioned here: https://buddypress.org/support/topic/activity-comments-post-blank-until-refresh/.This error happens when attempting to add a comment to a group post. I believe this is a similar problem as the one expressed here: https://buddypress.org/support/topic/activity-comments-post-blank-until-refresh/
For information:
- WordPress
4.5.3
- BuddyPress
2.6.1.1
- Single site install in web root
- There are indeed other plugins activated on this site. The full list is below. This site is for a client, and I’m unsure of which plugins can be safely deactivated to test.
- We’re using a customized theme, but I have tested with the TwentySixteen theme and found the same results.
- The core BuddyPress files have not been modified to my knowledge.
- The site is hosted on Page.ly, but I can reproduce the problems in a local VVV install
- The live site is http://www.lifeofdad.com/
I believe that this may be a problem inside BuddyPress itself, as the function with the infinite loop is part of BuddyPress. The Javascript that makes the Ajax request is part of the BuddyPress Wall plugin, but from what I can tell the problem is in the aforementioned
bp_legacy_theme_new_activity_comment()
function.My specific concern is this loop:
// Load the new activity item into the $activities_template global. bp_has_activities( 'display_comments=stream&hide_spam=false&show_hidden=true&include=' . $comment_id ); // Swap the current comment with the activity item we just loaded. if ( isset( $activities_template->activities[0] ) ) { $activities_template->activity = new stdClass(); $activities_template->activity->id = $activities_template->activities[0]->item_id; $activities_template->activity->current_comment = $activities_template->activities[0]; // Because the whole tree has not been loaded, we manually // determine depth. $depth = 1; $parent_id = (int) $activities_template->activities[0]->secondary_item_id; while ( $parent_id !== (int) $activities_template->activities[0]->item_id ) { $depth++; $p_obj = new BP_Activity_Activity( $parent_id ); $parent_id = (int) $p_obj->secondary_item_id; } $activities_template->activity->current_comment->depth = $depth; }
I’ve run XDebug locally to inspect the items in the loop as it is running. If some of the raw variable data is required, I can provide that.
I have tried making some changes to the code in this loop to prevent the infinite loop from occurring. While successful in that endeavor with a few tweaks, the result is that the comment sent back through the Ajax response is the wrong comment, and a page refresh is still needed.
I considered filing a bug in Trac, but I wasn’t certain whether something else could possibly be interfering.
+--------------------------------------+--------+-----------+---------+ | name | status | update | version | +--------------------------------------+--------+-----------+---------+ | akismet | active | none | 3.1.11 | | all-in-one-seo-pack | active | available | 2.3.7 | | appbuddy | active | available | 2.0.7 | | appcamera | active | available | 2.0.0 | | appfbconnect | active | none | 2.3.0 | | apppresser | active | none | 2.5.0 | | apppush | active | available | 2.1.0 | | appshare | active | none | 2.1.0 | | appswiper | active | available | 2.2.1 | | bp-profile-search | active | none | 4.5.2 | | buddypress | active | none | 2.6.1.1 | | buddypress-activity-plus | active | none | 1.6.4 | | bp-moderation | active | none | 0.1.7 | | buddypress-nocaptcha-register-box | active | none | 1.1.3 | | buddypress-toolbar | active | none | 1.6.0 | | buddypress-wall | active | none | 0.9.4 | | buddypress-xprofile-image-field | active | none | 2.0.1 | | category-posts | active | none | 4.6.1 | | contact-form-7 | active | none | 4.4.2 | | contact-form-7-to-database-extension | active | none | 2.10.20 | | cubell-themes-functionality | active | none | 3.1 | | envato-wordpress-toolkit | active | none | 1.7.3 | | hashbuddy | active | none | 1.5.2 | | login-with-ajax | active | none | 3.1.6 | | mailchimp-for-wp | active | none | 3.1.11 | | nav-menu-roles | active | none | 1.8.2 | | nextend-facebook-connect | active | none | 1.5.9 | | buddypress-media | active | none | 4.0.4 | | vine-embed | active | none | 0.2 | | wds-lod-automatic-friends | active | none | 0.1.0 | | wds-lod-base | active | none | 0.1.0 | | wds-lod-bp | active | none | 0.1.0 | | wds-lod-post-types | active | none | 0.1.0 | | wds-lod-widgets | active | none | 0.1.0 | | wordpress-importer | active | none | 0.6.1 | +--------------------------------------+--------+-----------+---------+
- WordPress
- You must be logged in to reply to this topic.