[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#5005) test017 fails



Pierangelo Masarati <ando@sys-net.it> writes:

> dieter@dkluenter.de wrote:
>
> The problem is in slap_parse_sync_cookie(); when no cookie is passed, a
> string containing "rid=001" is parsed.  The parser expects it to end
> with a comma.  If passing "rid=001" is correct, the fix is trivial:
> instead of checking for (*next != ','), check for (*next && *next != ',').
>
> Index: servers/slapd/ldapsync.c
> ===================================================================
> RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/ldapsync.c,v
> retrieving revision 1.42
> diff -u -r1.42 ldapsync.c
> --- servers/slapd/ldapsync.c    18 May 2007 12:46:52 -0000      1.42
> +++ servers/slapd/ldapsync.c    9 Jun 2007 09:42:24 -0000
> @@ -180,7 +180,10 @@
>                 if ( !strncmp( next, "rid=", STRLENOF("rid=") )) {
>                         rid_ptr = next;
>                         cookie->rid = strtoul( &rid_ptr[ STRLENOF(
> "rid=" ) ], &next, 10 );
> -                       if ( next == rid_ptr || next > end || *next !=
> ',' ) {
> +                       if ( next == rid_ptr
> +                               || next > end
> +                               || ( *next && *next != ',' ) )
> +                       {
>                                 return -1;
>                         }
>                         if ( *next == ',' ) {
> @@ -194,7 +197,10 @@
>                 if ( !strncmp( next, "sid=", STRLENOF("sid=") )) {
>                         rid_ptr = next;
>                         cookie->sid = strtoul( &rid_ptr[ STRLENOF(
> "sid=" ) ], &next, 16 );
> -                       if ( next == rid_ptr || next > end || *next !=
> ',' ) {
> +                       if ( next == rid_ptr
> +                               || next > end
> +                               || ( *next && *next != ',' ) )
> +                       {
>                                 return -1;
>                         }
>                         if ( *next == ',' ) {
>
> I'm not committing this fix because I'm not sure it doesn't break
> anything else.

the patch fails, this is the patch reject file:

---ldapsync.c.rej -------------------------------

***************
*** 180,186 ****
                 if ( !strncmp( next, "rid=", STRLENOF("rid=") )) {
                         rid_ptr = next;
                         cookie->rid = strtoul( &rid_ptr[ STRLENOF( "rid=" ) ], &next, 10 );
-                        if ( next == rid_ptr || next > end || *next != ',' ) {
                                 return -1;
                         }
                         if ( *next == ',' ) {
--- 180,189 ----
                 if ( !strncmp( next, "rid=", STRLENOF("rid=") )) {
                         rid_ptr = next;
                         cookie->rid = strtoul( &rid_ptr[ STRLENOF( "rid=" ) ], &next, 10 );
+                        if ( next == rid_ptr
+                                || next > end
+                                || ( *next && *next != ',' ) )
+                        {
                                 return -1;
                         }
                         if ( *next == ',' ) {
***************
*** 194,200 ****
                 if ( !strncmp( next, "sid=", STRLENOF("sid=") )) {
                         rid_ptr = next;
                         cookie->sid = strtoul( &rid_ptr[ STRLENOF( "sid=" ) ]. &next, 16 );
-                        if ( next == rid_ptr || next > end || *next != ',' ) {
                                 return -1;
                         }
                         if ( *next == ',' ) {
--- 197,206 ----
                 if ( !strncmp( next, "sid=", STRLENOF("sid=") )) {
                         rid_ptr = next;
                         cookie->sid = strtoul( &rid_ptr[ STRLENOF( "sid=" ) ]. &next, 16 );
+                        if ( next == rid_ptr
+                                || next > end
+                                || ( *next && *next != ',' ) )
+                        {
                                 return -1;
                         }
                         if ( *next == ',' ) {

-Dieter


-- 
Dieter Klünter | Systemberatung
http://www.dkluenter.de
GPG Key ID:8EF7B6C6