Skip to:
Content

BuddyPress.org

Ticket #7524: 7524.1.diff

File 7524.1.diff, 2.9 KB (added by dcavins, 2 years ago)

Protect mod and admin fetchers against bad group IDs.

  • src/bp-groups/classes/class-bp-groups-member.php

    diff --git src/bp-groups/classes/class-bp-groups-member.php src/bp-groups/classes/class-bp-groups-member.php
    index b5b69b3..ba493fc 100644
    class BP_Groups_Member { 
    10881088        public static function get_group_administrator_ids( $group_id ) {
    10891089                global $wpdb;
    10901090
     1091                if ( empty( $group_id ) ) {
     1092                        return array();
     1093                }
     1094
    10911095                $group_admins = wp_cache_get( $group_id, 'bp_group_admins' );
    10921096
    10931097                if ( false === $group_admins ) {
    class BP_Groups_Member { 
    10951099                        $group_admins = wp_cache_get( $group_id, 'bp_group_admins' );
    10961100                }
    10971101
    1098                 // Integer casting.
    1099                 foreach ( (array) $group_admins as $key => $data ) {
    1100                         $group_admins[ $key ]->user_id = (int) $group_admins[ $key ]->user_id;
     1102                if ( false === $group_admins ) {
     1103                        // The wp_cache_get is still coming up empty. Return an empty array.
     1104                        $group_admins = array();
     1105                } else {
     1106                        // Cast the user_id property as an integer.
     1107                        foreach ( (array) $group_admins as $key => $data ) {
     1108                                $group_admins[ $key ]->user_id = (int) $group_admins[ $key ]->user_id;
     1109                        }
    11011110                }
    11021111
    11031112                return $group_admins;
    class BP_Groups_Member { 
    11581167        public static function get_group_moderator_ids( $group_id ) {
    11591168                global $wpdb;
    11601169
     1170                if ( empty( $group_id ) ) {
     1171                        return array();
     1172                }
     1173
    11611174                $group_mods = wp_cache_get( $group_id, 'bp_group_mods' );
    11621175
    11631176                if ( false === $group_mods ) {
    class BP_Groups_Member { 
    11651178                        $group_mods = wp_cache_get( $group_id, 'bp_group_mods' );
    11661179                }
    11671180
    1168                 // Integer casting.
    1169                 foreach ( (array) $group_mods as $key => $data ) {
    1170                         $group_mods[ $key ]->user_id = (int) $group_mods[ $key ]->user_id;
     1181                if ( false === $group_mods ) {
     1182                        // The wp_cache_get is still coming up empty. Return an empty array.
     1183                        $group_mods = array();
     1184                } else {
     1185                        // Cast the user_id property as an integer.
     1186                        foreach ( (array) $group_mods as $key => $data ) {
     1187                                $group_mods[ $key ]->user_id = (int) $group_mods[ $key ]->user_id;
     1188                        }
    11711189                }
    11721190
    11731191                return $group_mods;
  • tests/phpunit/testcases/groups/class-bp-groups-member.php

    diff --git tests/phpunit/testcases/groups/class-bp-groups-member.php tests/phpunit/testcases/groups/class-bp-groups-member.php
    index 28952bd..580b9aa 100644
    class BP_Tests_BP_Groups_Member_TestCases extends BP_UnitTestCase { 
    13171317                $this->assertInstanceOf( 'BP_Core_User', $user_obj );
    13181318                $this->assertEquals( $user, $user_obj->id );
    13191319        }
     1320
     1321        /**
     1322         * @group get_group_moderator_ids
     1323         */
     1324        public function test_groups_get_group_mods_bad_id() {
     1325                $mods = groups_get_group_mods( null );
     1326
     1327                $this->assertTrue( is_array( $mods ) && empty( $mods ) );
     1328        }
     1329
     1330        /**
     1331         * @group get_group_moderator_ids
     1332         */
     1333        public function test_groups_get_group_admins_bad_id() {
     1334                $admins = groups_get_group_admins( null );
     1335
     1336                $this->assertTrue( is_array( $admins ) && empty( $admins ) );
     1337        }
    13201338}