]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Iconv converts the terminating NUL in the LDAP string
authorFrederic Marchal <fmarchal@users.sourceforge.net>
Wed, 29 May 2013 19:20:45 +0000 (21:20 +0200)
committerFrederic Marchal <fmarchal@users.sourceforge.net>
Wed, 29 May 2013 19:20:45 +0000 (21:20 +0200)
The LDAP string was not completely converted and was lacking the
terminating zero.

usertab.c

index 780c2006df7df4f4b4d6aecf889f5b712ca22d5c..f943685778ffa7cb63751a6c66a04c310714b9bd 100644 (file)
--- a/usertab.c
+++ b/usertab.c
@@ -216,11 +216,11 @@ const char * charset_convert( const char * str_in, const char * charset_to )
        size_t str_in_len;
        size_t str_out_len;
 
-       str_in_len = strlen( str_in );
+       str_in_len = strlen( str_in ) + 1;//process the terminating NUL too
        str_out_len = ( 2 * str_in_len );
        if (ldapconvbuffer==NULL || ldapconvbuffersize<str_out_len) {
                ldapconvbuffersize=str_out_len;
-               str_out = realloc(ldapconvbuffer,str_out_len);
+               str_out = realloc(ldapconvbuffer,ldapconvbuffersize);
                if (!str_out) {
                        debuga(_("Not enough memory to convert a LDAP returned string: %lu bytes required\n"),(unsigned long int)str_out_len);
                        exit(EXIT_FAILURE);
@@ -228,6 +228,7 @@ const char * charset_convert( const char * str_in, const char * charset_to )
                ldapconvbuffer = str_out;
        } else {
                str_out = ldapconvbuffer;
+               str_out_len = ldapconvbuffersize;
        }
        str_in_orig = str_in;
        return_value = iconv(ldapiconv, (ICONV_CONST char **)&str_in, &str_in_len, &str_out, &str_out_len );