The branch, master has been updated
       via  7fd3eb6 util:charset: Return EILSEQ in smb_iconv() if newer libc is 
detected
       via  669d215 auth: fix mem leak & use appropriate free function
      from  39ac4ae ctdb-tests: Use replace headers instead of system headers

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7fd3eb6c04bebd5c8cd25b81198dc0112703497a
Author: Andreas Schneider <a...@samba.org>
Date:   Mon Jan 30 17:17:38 2017 +0100

    util:charset: Return EILSEQ in smb_iconv() if newer libc is detected
    
    This is the behaviour of glibc 2.24 and newer.
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Wed Feb  1 05:16:46 CET 2017 on sn-devel-144

commit 669d2152cb9c1111d36127daee64b4bbfc141b7a
Author: Aurelien Aptel <aap...@suse.com>
Date:   Tue Jan 17 14:39:02 2017 +0100

    auth: fix mem leak & use appropriate free function
    
    coverity fix.
    
    cli_credentials_set_principal does a strdup, we want to free 'name'
    regardless of the result in 'ok'.
    
    Signed-off-by: Aurelien Aptel <aap...@suse.com>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 auth/credentials/credentials_krb5.c |  2 +-
 lib/util/charset/iconv.c            |  6 +++---
 lib/util/charset/wscript_configure  | 20 ++++++++++++++++++++
 3 files changed, 24 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/auth/credentials/credentials_krb5.c 
b/auth/credentials/credentials_krb5.c
index 3663e1d..d2a655e 100644
--- a/auth/credentials/credentials_krb5.c
+++ b/auth/credentials/credentials_krb5.c
@@ -260,11 +260,11 @@ static int cli_credentials_set_from_ccache(struct 
cli_credentials *cred,
        }
 
        ok = cli_credentials_set_principal(cred, name, obtained);
+       krb5_free_unparsed_name(ccache->smb_krb5_context->krb5_context, name);
        if (!ok) {
                krb5_free_principal(ccache->smb_krb5_context->krb5_context, 
princ);
                return ENOMEM;
        }
-       free(name);
 
        realm = 
smb_krb5_principal_get_realm(ccache->smb_krb5_context->krb5_context,
                                             princ);
diff --git a/lib/util/charset/iconv.c b/lib/util/charset/iconv.c
index bf561f2..e06fa2c 100644
--- a/lib/util/charset/iconv.c
+++ b/lib/util/charset/iconv.c
@@ -740,12 +740,12 @@ static size_t utf8_push(void *cd, const char **inbuf, 
size_t *inbytesleft,
                }
 
                if ((uc[1] & 0xfc) == 0xdc) {
-                       /* its the second part of a 4 byte sequence. Illegal */
+                       errno = EILSEQ;
+#ifndef HAVE_ICONV_ERRNO_ILLEGAL_MULTIBYTE
                        if (in_left < 4) {
                                errno = EINVAL;
-                       } else {
-                               errno = EILSEQ;
                        }
+#endif
                        goto error;
                }
 
diff --git a/lib/util/charset/wscript_configure 
b/lib/util/charset/wscript_configure
index 804c266..d5ac5d0 100644
--- a/lib/util/charset/wscript_configure
+++ b/lib/util/charset/wscript_configure
@@ -16,3 +16,23 @@ if (conf.CHECK_FUNCS_IN('iconv_open', 'iconv', 
checklibc=False, headers='iconv.h
     conf.CHECK_FUNCS('iconv_open', headers='iconv.h')):
     
     conf.DEFINE('HAVE_NATIVE_ICONV', 1)
+
+conf.CHECK_CODE('''
+                uint8_t inbuf[2] = { 0x30, 0xdf };
+                uint8_t outbuf[4] = { 0 };
+                char *ptr_in = (char *)inbuf;
+                char *ptr_out = (char *)outbuf;
+                size_t size_in = sizeof(inbuf);
+                size_t size_out = sizeof(outbuf);
+                size_t ret;
+                iconv_t cd;
+                cd = iconv_open("UTF-8", "UTF-16LE");
+                if (cd == 0 || cd == (iconv_t)-1) return -1;
+                ret = iconv(cd, &ptr_in, &size_in, &ptr_out, &size_out);
+                if (ret != (size_t)-1 || errno != EILSEQ) return -1;
+                ''',
+                define='HAVE_ICONV_ERRNO_ILLEGAL_MULTIBYTE',
+                execute=True,
+                msg='Checking errno of iconv for illegal multibyte sequence',
+                lib='iconv',
+                headers='errno.h iconv.h')


-- 
Samba Shared Repository

Reply via email to