Patch: Wrong return types for ber_scanf and ber_flatten (ITS#1701) ================ Written by Hallvard B. Furuseth and placed into the public domain. This software is not subject to any license of the University of Oslo. ================ Fix code which assigns the return value of ber_scanf to an int and then usually tests if that is LBER_ERROR, and which checks ber_flatten() == LBER_ERROR instead of -1. The request.c patch patches rc=ber_printf instead because most uses of 'rc' is with ber_scanf, so it's simpler to change the type of 'rc' and then change the uses of 'rc' which are not with ber_scanf. Hallvard B. Furuseth , March 2002. diff -u2 -r libraries/liblber/dtest.c libraries/liblber/dtest.c --- libraries/liblber/dtest.c Fri Jan 4 21:17:36 2002 +++ libraries/liblber/dtest.c Sun Mar 31 16:12:47 2002 @@ -41,5 +41,5 @@ { char *s; - int rc; + ber_tag_t rc; ber_tag_t tag; diff -u2 -r libraries/libldap/controls.c libraries/libldap/controls.c --- libraries/libldap/controls.c Fri Jan 4 21:17:38 2002 +++ libraries/libldap/controls.c Sun Mar 31 16:14:16 2002 @@ -423,5 +423,5 @@ } - if ( ber_flatten( ber, &bvalp ) == LBER_ERROR ) { + if ( ber_flatten( ber, &bvalp ) == -1 ) { LDAP_FREE( ctrl ); return LDAP_NO_MEMORY; diff -u2 -r libraries/libldap/request.c libraries/libldap/request.c --- libraries/libldap/request.c Fri Jan 4 21:17:39 2002 +++ libraries/libldap/request.c Sun Mar 31 16:24:54 2002 @@ -982,5 +983,6 @@ ber_int_t ver; ber_int_t scope; - int rc; + ber_tag_t rc; + int rc2; BerElement tmpber, *ber; char *orig_dn; @@ -1052,16 +1054,16 @@ if ( tag == LDAP_REQ_BIND ) { - rc = ber_printf( ber, "{it{is" /*}}*/, msgid, tag, ver, dn ); + rc2 = ber_printf( ber, "{it{is" /*}}*/, msgid, tag, ver, dn ); } else if ( tag == LDAP_REQ_DELETE ) { - rc = ber_printf( ber, "{itsN}", msgid, tag, dn ); + rc2 = ber_printf( ber, "{itsN}", msgid, tag, dn ); } else if ( tag == LDAP_REQ_SEARCH ) { - rc = ber_printf( ber, "{it{se" /*}}*/, msgid, tag, dn, scope ); + rc2 = ber_printf( ber, "{it{se" /*}}*/, msgid, tag, dn, scope ); } else { - rc = ber_printf( ber, "{it{s" /*}}*/, msgid, tag, dn ); + rc2 = ber_printf( ber, "{it{s" /*}}*/, msgid, tag, dn ); } LDAP_FREE( orig_dn ); - if ( rc == -1 ) { + if ( rc2 == -1 ) { ld->ld_errno = LDAP_ENCODING_ERROR; ber_free( ber, 1 ); diff -u2 -r servers/slapd/add.c servers/slapd/add.c --- servers/slapd/add.c Fri Jan 25 07:07:55 2002 +++ servers/slapd/add.c Sun Mar 31 17:25:00 2002 @@ -110,8 +110,9 @@ { Modifications *mod; + ber_tag_t rc2; - rc = ber_scanf( ber, "{m{W}}", &tmp.sml_type, &tmp.sml_bvalues ); + rc2 = ber_scanf( ber, "{m{W}}", &tmp.sml_type, &tmp.sml_bvalues ); - if ( rc == LBER_ERROR ) { + if ( rc2 == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, diff -u2 -r servers/slapd/ava.c servers/slapd/ava.c --- servers/slapd/ava.c Sun Jan 6 06:11:01 2002 +++ servers/slapd/ava.c Sun Mar 31 17:29:44 2002 @@ -40,7 +40,5 @@ AttributeAssertion *aa; - rc = ber_scanf( ber, "{mm}", &type, &value ); - - if( rc == LBER_ERROR ) { + if( ber_scanf( ber, "{mm}", &type, &value ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "filter", LDAP_LEVEL_ERR, diff -u2 -r servers/slapd/mra.c servers/slapd/mra.c --- servers/slapd/mra.c Sun Jan 6 06:21:11 2002 +++ servers/slapd/mra.c Sun Mar 31 17:41:52 2002 @@ -39,4 +39,5 @@ { int rc, tag; + ber_tag_t rc2; ber_len_t length; struct berval type, value; @@ -51,7 +52,5 @@ ma->ma_value.bv_val = NULL; - rc = ber_scanf( ber, "{t", &tag ); - - if( rc == LBER_ERROR ) { + if( ber_scanf( ber, "{t", &tag ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -67,6 +66,5 @@ if ( tag == LDAP_FILTER_EXT_OID ) { - rc = ber_scanf( ber, "m", &ma->ma_rule_text ); - if ( rc == LBER_ERROR ) { + if ( ber_scanf( ber, "m", &ma->ma_rule_text ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -82,7 +80,5 @@ ma->ma_rule = mr_bvfind( &ma->ma_rule_text ); - rc = ber_scanf( ber, "t", &tag ); - - if( rc == LBER_ERROR ) { + if( ber_scanf( ber, "t", &tag ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -99,6 +95,5 @@ if ( tag == LDAP_FILTER_EXT_TYPE ) { - rc = ber_scanf( ber, "m", &type ); - if ( rc == LBER_ERROR ) { + if ( ber_scanf( ber, "m", &type ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -119,7 +114,5 @@ } - rc = ber_scanf( ber, "t", &tag ); - - if( rc == LBER_ERROR ) { + if( ber_scanf( ber, "t", &tag ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -148,7 +141,5 @@ } - rc = ber_scanf( ber, "m", &value ); - - if( rc == LBER_ERROR ) { + if( ber_scanf( ber, "m", &value ) == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, @@ -177,11 +168,11 @@ if ( tag == LDAP_FILTER_EXT_DNATTRS ) { - rc = ber_scanf( ber, "b}", &ma->ma_dnattrs ); + rc2 = ber_scanf( ber, "b}", &ma->ma_dnattrs ); } else { - rc = ber_scanf( ber, "}" ); + rc2 = ber_scanf( ber, "}" ); ma->ma_dnattrs = 0; } - if( rc == LBER_ERROR ) { + if( rc2 == LBER_ERROR ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR,