dsdb: Check for pointers before we deference them.
authorAndreas Schneider <asn@samba.org>
Mon, 25 Feb 2013 14:48:20 +0000 (15:48 +0100)
committerDavid Disseldorp <ddiss@suse.de>
Tue, 5 Mar 2013 22:30:08 +0000 (23:30 +0100)
Reviewed-by: David Disseldorp <ddiss@samba.org>
source4/dsdb/common/dsdb_dn.c

index b53de409fecd5711f81aebd256c9206cabe0fbc6..0029f5d49efaba4bd73ab934b07013aeb2ef9cc3 100644 (file)
@@ -87,6 +87,11 @@ struct dsdb_dn *dsdb_dn_parse(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
        char *dn_str;
 
        enum dsdb_dn_format dn_format = dsdb_dn_oid_to_format(dn_oid);
+
+       if (dn_blob == NULL || dn_blob->data == NULL || dn_blob->length == 0) {
+               return NULL;
+       }
+
        switch (dn_format) {
        case DSDB_INVALID_DN:
                return NULL;
@@ -113,16 +118,11 @@ struct dsdb_dn *dsdb_dn_parse(TALLOC_CTX *mem_ctx, struct ldb_context *ldb,
                return NULL;
        }
 
-       if (dn_blob && dn_blob->data
-           && (strlen((const char*)dn_blob->data) != dn_blob->length)) {
+       if (strlen((const char*)dn_blob->data) != dn_blob->length) {
                /* The RDN must not contain a character with value 0x0 */
                return NULL;
        }
-               
-       if (!dn_blob->data || dn_blob->length == 0) {
-               return NULL;
-       }
-               
+
        tmp_ctx = talloc_new(mem_ctx);
        if (tmp_ctx == NULL) {
                return NULL;