Bug #79165 [Opn->Csd]: trying to access ldap_get_entries array triggers: Trying to access array offset

From: Date: Fri, 24 Jan 2020 21:29:44 +0000
Subject: Bug #79165 [Opn->Csd]: trying to access ldap_get_entries array triggers: Trying to access array offset
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-225108@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79165&edit=1

 ID:                 79165
 User updated by:    mbiebl at messageconcept dot com
 Reported by:        mbiebl at messageconcept dot com
 Summary:            trying to access ldap_get_entries array triggers:
                     Trying to access array offset
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            LDAP related
 PHP Version:        7.4.2
 Block user comment: N
 Private report:     N

 New Comment:

Let's close this. This is an issue that needs to be solved in our code.
The issue was just hidden with previous PHP releases. We need to handle the 'count' array
entry explicitly.
Not sure yet, if array_slice() is the proper solution. I guess there is no guarantee that the
'count' entry will always be the first entry in the result array.


Previous Comments:
------------------------------------------------------------------------
[2020-01-24 13:12:28] mbiebl at messageconcept dot com

$result = ldap_search($con, $dn, $filter, $justthese);
$entries = ldap_get_entries($con, $result);

foreach ($entries as $e) {
    if ($e[$this->uidNameAttribute][0] == '') {
        continue;
    }
    $principal = array('uri' => 'principals/' .
strtolower($e[$this->uidNameAttribute][0]),);
    foreach ($this->fieldMap as $key => $value) {
        if (isset($e[$value['ldapProperty']])) {
            $principal[$key] = $e[$value['ldapProperty']][0];
        }
    }
    $principals[] = $principal;
}

------------------------------------------------------------------------
[2020-01-24 13:07:39] cmb@php.net

Could you please post the relevant code (and show the reported
line number)?

------------------------------------------------------------------------
[2020-01-24 12:28:07] mbiebl at messageconcept dot com

Hm, right. I guess I need to explicitly skip the "count" element now which is part of the
$result array.

foreach (array_slice($entries, 1) as $e) { .. }

appears to work. Not sure if this is the cleanest solution though. WDYT?

------------------------------------------------------------------------
[2020-01-24 12:05:41] nikic@php.net

foreach does not trigger this notice. Please check the reported line number carefully. It must
involve something like "$array[$offset]".

------------------------------------------------------------------------
[2020-01-24 11:55:25] mbiebl at messageconcept dot com

Description:
------------
I have the following code

$result = ldap_search($con, $dn, $filter, $justthese);
$entries = ldap_get_entries($con, $result);

and then the following code to iterate through the results

foreach ($entries as $e) { ... }

This code worked fine with 7.3 and now yields the following error with 7.4:
"Trying to access array offset on value of type resource"

ldap_get_entries() is supposed to return an array and var_dump($entries) prints
array(11) {
  ["count"]=>
  int(10)
  [0]=>
 ....
}

So something is at odds here. Why does PHP 7.4 think $entries is not an array?





------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=79165&edit=1


Thread (8 messages)

« previous php.bugs (#225108) next »