Browse Source

Ticket #47835 - Coverity: 12687..12692

12688 - Unbounded source buffer
Description: To solve "Passing string argv[0] of unknown size to
slapi_ch_strdup, which expects a string of a particular size", get
ARG_MAX and pass it to slapi_ch_strndup.

Reviewed by [email protected] (Thanks, Rich!)

https://fedorahosted.org/389/ticket/47835
Noriko Hosoi 11 years ago
parent
commit
0a546bcb3d
1 changed files with 11 additions and 2 deletions
  1. 11 2
      ldap/servers/slapd/main.c

+ 11 - 2
ldap/servers/slapd/main.c

@@ -650,6 +650,8 @@ main( int argc, char **argv)
 	int return_value = 0;
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
 	daemon_ports_t ports_info = {0};
+	long arg_max = 0;
+
 #ifndef __LP64__ 
 #if defined(__hpux) && !defined(__ia64)
 	/* for static constructors */
@@ -722,9 +724,16 @@ main( int argc, char **argv)
 #endif /* _WIN32 */
 
 	if ( (myname = strrchr( argv[0], '/' )) == NULL ) {
-		myname = slapi_ch_strdup( argv[0] );
+		arg_max = sysconf(_SC_ARG_MAX);
+		myname = slapi_ch_strndup( argv[0], arg_max );
 	} else {
-		myname = slapi_ch_strdup( myname + 1 );
+		myname = slapi_ch_strndup( myname + 1, arg_max );
+	}
+	if (strlen(myname) > arg_max) {
+		LDAPDebug(LDAP_DEBUG_ANY, 
+		          "proc name \"%s\" is longer than the allowed max size: %dB\n",
+		          myname, arg_max, 0);
+		exit(1);
 	}
 
 #if defined( XP_WIN32 )