@@ -4259,23 +4259,23 @@ PHP_FUNCTION(ldap_exop)
4259
4259
PHP_FUNCTION (ldap_exop_passwd )
4260
4260
{
4261
4261
zval * link , * serverctrls ;
4262
- struct berval luser , loldpw , lnewpw , lgenpasswd ;
4262
+ struct berval luser = { 0L , NULL };
4263
+ struct berval loldpw = { 0L , NULL };
4264
+ struct berval lnewpw = { 0L , NULL };
4265
+ struct berval lgenpasswd = { 0L , NULL };
4263
4266
LDAPControl * ctrl , * * lserverctrls = NULL , * requestctrls [2 ] = { NULL , NULL };
4264
- LDAPMessage * ldap_res ;
4267
+ LDAPMessage * ldap_res = NULL ;
4265
4268
ldap_linkdata * ld ;
4266
4269
int rc , myargcount = ZEND_NUM_ARGS (), msgid , err ;
4267
- char * errmsg ;
4268
-
4269
- luser .bv_len = 0 ;
4270
- loldpw .bv_len = 0 ;
4271
- lnewpw .bv_len = 0 ;
4270
+ char * errmsg = NULL ;
4272
4271
4273
4272
if (zend_parse_parameters (myargcount , "r|sssz/" , & link , & luser .bv_val , & luser .bv_len , & loldpw .bv_val , & loldpw .bv_len , & lnewpw .bv_val , & lnewpw .bv_len , & serverctrls ) == FAILURE ) {
4274
4273
return ;
4275
4274
}
4276
4275
4277
4276
if ((ld = (ldap_linkdata * )zend_fetch_resource (Z_RES_P (link ), "ldap link" , le_link )) == NULL ) {
4278
- RETURN_FALSE ;
4277
+ RETVAL_FALSE ;
4278
+ goto cleanup ;
4279
4279
}
4280
4280
4281
4281
switch (myargcount ) {
@@ -4299,30 +4299,23 @@ PHP_FUNCTION(ldap_exop_passwd)
4299
4299
4300
4300
if (rc != LDAP_SUCCESS ) {
4301
4301
php_error_docref (NULL , E_WARNING , "Passwd modify extended operation failed: %s (%d)" , ldap_err2string (rc ), rc );
4302
- RETURN_FALSE ;
4302
+ RETVAL_FALSE ;
4303
+ goto cleanup ;
4303
4304
}
4304
4305
4305
4306
rc = ldap_result (ld -> link , msgid , 1 /* LDAP_MSG_ALL */ , NULL , & ldap_res );
4306
4307
if ((rc < 0 ) || !ldap_res ) {
4307
4308
rc = _get_lderrno (ld -> link );
4308
4309
php_error_docref (NULL , E_WARNING , "Passwd modify extended operation failed: %s (%d)" , ldap_err2string (rc ), rc );
4309
- RETURN_FALSE ;
4310
+ RETVAL_FALSE ;
4311
+ goto cleanup ;
4310
4312
}
4311
4313
4312
4314
rc = ldap_parse_passwd (ld -> link , ldap_res , & lgenpasswd );
4313
4315
if ( rc != LDAP_SUCCESS ) {
4314
4316
php_error_docref (NULL , E_WARNING , "Passwd modify extended operation failed: %s (%d)" , ldap_err2string (rc ), rc );
4315
- ldap_msgfree (ldap_res );
4316
- RETURN_FALSE ;
4317
- }
4318
-
4319
- rc = ldap_parse_result (ld -> link , ldap_res , & err , NULL , & errmsg , NULL , (myargcount > 4 ? & lserverctrls : NULL ), 1 ); /* memleak: ??? */
4320
- if ( rc != LDAP_SUCCESS ) {
4321
- php_error_docref (NULL , E_WARNING , "Passwd modify extended operation failed: %s (%d)" , ldap_err2string (rc ), rc );
4322
- if (lserverctrls ) {
4323
- ldap_controls_free (lserverctrls );
4324
- }
4325
- RETURN_FALSE ;
4317
+ RETVAL_FALSE ;
4318
+ goto cleanup ;
4326
4319
}
4327
4320
4328
4321
if (lnewpw .bv_len == 0 ) {
@@ -4336,13 +4329,30 @@ PHP_FUNCTION(ldap_exop_passwd)
4336
4329
} else {
4337
4330
php_error_docref (NULL , E_WARNING , "Passwd modify extended operation failed: %s (%d)" , (errmsg ? errmsg : ldap_err2string (err )), err );
4338
4331
RETVAL_FALSE ;
4332
+ goto cleanup ;
4333
+ }
4334
+
4335
+ rc = ldap_parse_result (ld -> link , ldap_res , & err , NULL , & errmsg , NULL , (myargcount > 4 ? & lserverctrls : NULL ), 0 ); /* memleak: ??? */
4336
+ if ( rc != LDAP_SUCCESS ) {
4337
+ php_error_docref (NULL , E_WARNING , "Passwd modify extended operation failed: %s (%d)" , ldap_err2string (rc ), rc );
4338
+ RETVAL_FALSE ;
4339
+ goto cleanup ;
4339
4340
}
4340
4341
4341
4342
if (myargcount > 4 ) {
4342
4343
_php_ldap_controls_to_array (ld -> link , lserverctrls , serverctrls , 0 );
4343
4344
}
4344
4345
4345
- ldap_memfree (lgenpasswd .bv_val );
4346
+ cleanup :
4347
+ if (lgenpasswd .bv_val != NULL ) {
4348
+ ldap_memfree (lgenpasswd .bv_val );
4349
+ }
4350
+ if (ldap_res != NULL ) {
4351
+ ldap_msgfree (ldap_res );
4352
+ }
4353
+ if (errmsg != NULL ) {
4354
+ ldap_memfree (errmsg );
4355
+ }
4346
4356
}
4347
4357
/* }}} */
4348
4358
#endif
0 commit comments