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

crypto/x509/by_dir.c

index b0a4afae838dd2db455cc75cac1753bebf805abd..f02168ab92a255ff85645fdb10608bb04b3a0f44 100644 (file)
@@ -218,7 +218,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'))
                        {
@@ -230,10 +230,12 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
                        for (j=0; j < sk_BY_DIR_ENTRY_num(ctx->dirs); j++)
                                {
                                ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j);
-                               if (strncmp(ent->dir,ss,(unsigned int)len) == 0)
-                                       continue;
+                               if (strlen(ent->dir) == len &&
+                                   strncmp(ent->dir,ss,(unsigned int)len) == 0)
+                                       break;
                                }
-                       
+                       if (j < sk_BY_DIR_ENTRY_num(ctx->dirs))
+                               continue;
                        if (ctx->dirs == NULL)
                                {
                                ctx->dirs = sk_BY_DIR_ENTRY_new_null();
@@ -264,7 +266,6 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type)
                        }
                if (*p == '\0')
                        break;
-               p++;
                }
        return 1;
        }