]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
fix NOOP return code (ITS#4563; I'll check and confirm it later; NOOP support might...
[openldap] / servers / slapd / result.c
index f91be836ae33b5fa181752e6a0b9f618bfd86220..bb27c760f3638cbc3cd7872e5db45e9fea6d416d 100644 (file)
@@ -1466,9 +1466,43 @@ str2result(
                }
 
                if ( strncasecmp( s, "code", STRLENOF( "code" ) ) == 0 ) {
-                       if ( c != NULL ) {
-                               *code = atoi( c );
+                       char    *next = NULL;
+                       long    retcode;
+
+                       if ( c == NULL ) {
+                               Debug( LDAP_DEBUG_ANY, "str2result (%s) missing value\n",
+                                   s, 0, 0 );
+                               rc = -1;
+                               continue;
+                       }
+
+                       while ( isspace( (unsigned char) c[ 0 ] ) ) c++;
+                       if ( c[ 0 ] == '\0' ) {
+                               Debug( LDAP_DEBUG_ANY, "str2result (%s) missing or empty value\n",
+                                   s, 0, 0 );
+                               rc = -1;
+                               continue;
+                       }
+
+                       retcode = strtol( c, &next, 10 );
+                       if ( next == NULL || next == c ) {
+                               Debug( LDAP_DEBUG_ANY, "str2result (%s) unable to parse value\n",
+                                   s, 0, 0 );
+                               rc = -1;
+                               continue;
                        }
+
+                       while ( isspace( (unsigned char) next[ 0 ] ) ) next++;
+                       if ( next[ 0 ] != '\0' ) {
+                               Debug( LDAP_DEBUG_ANY, "str2result (%s) extra cruft after value\n",
+                                   s, 0, 0 );
+                               rc = -1;
+                               continue;
+                       }
+
+                       /* FIXME: what if it's larger that max int? */
+                       *code = (int)retcode;
+
                } else if ( strncasecmp( s, "matched", STRLENOF( "matched" ) ) == 0 ) {
                        if ( c != NULL ) {
                                *matched = c;