avoid duplicate entries in add_cert_dir()
authorNils Larsch <nils@openssl.org>
Tue, 5 Dec 2006 21:21:10 +0000 (21:21 +0000)
committerNils Larsch <nils@openssl.org>
Tue, 5 Dec 2006 21:21:10 +0000 (21:21 +0000)
PR: 1407
Submitted by: Tomas Mraz <tmraz@redhat.com>

crypto/x509/by_dir.c

index ea689aed1a2518bf4f02952db1dd0992698b8810..f33ea7b84f2529a683bb6bded6d9be179253a01d 100644 (file)
@@ -189,7 +189,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
 
        s=dir;
        p=s;
-       for (;;)
+       for (;;p++)
                {
                if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0'))
                        {
@@ -198,8 +198,11 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
                        len=(int)(p-ss);
                        if (len == 0) continue;
                        for (j=0; j<ctx->num_dirs; j++)
-                               if (strncmp(ctx->dirs[j],ss,(unsigned int)len) == 0)
-                                       continue;
+                               if (strlen(ctx->dirs[j]) == len &&
+                                   strncmp(ctx->dirs[j],ss,(unsigned int)len) == 0)
+                                       break;
+                       if (j<ctx->num_dirs)
+                               continue;
                        if (ctx->num_dirs_alloced < (ctx->num_dirs+1))
                                {
                                ctx->num_dirs_alloced+=10;
@@ -231,7 +234,6 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
                        ctx->num_dirs++;
                        }
                if (*p == '\0') break;
-               p++;
                }
        return(1);
        }