I noticed in GENERAL_NAME_print() code the following parsing code which has
a bug.

When my test certificate's subjectAltName has "IP Address: 2001::21"
[expanded out v6 style of course], then the code below ends up printing
“::21” instead of “2001::21”.

Note that when I use inet_ntop(AF_INET6, p, ....) it all works fine and I
get "2001::21".



               case GEN_IPADD:

               p = gen->d.ip->data;

               if(gen->d.ip->length == 4)

                       BIO_snprintf(oline, sizeof oline,

                                    "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);

*            else if(gen->d.ip->length == 16)** -------> **IPv6*

                       {

                       oline[0] = 0;

                       for (i = 0; i < 8; i++)

                               {

                               BIO_snprintf(htmp, sizeof htmp,

                                           *"%X", p[0] << 8 | p[1]*);

                               p += 2;

                               strcat(oline, htmp);

                               if (i != 7)

                                      strcat(oline, ":");

                               }

                       }



Thanks,

 Vineet

I noticed in GENERAL_NAME_print() code the following parsing code which has a bug.

When my test certificate's subjectAltName has "IP Address: 2001::21" [expanded out v6 style of course], then the code below ends up printing “::21” instead of “2001::21”.

Note that when I use inet_ntop(AF_INET6, p, ....) it all works fine and I get "2001::21".

 

               case GEN_IPADD:
               p = gen->d.ip->data;
               if(gen->d.ip->length == 4)
                       BIO_snprintf(oline, sizeof oline,
                                    "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
            else if(gen->d.ip->length == 16) -------> IPv6
                       {
                       oline[0] = 0;
                       for (i = 0; i < 8; i++)
                               {
                               BIO_snprintf(htmp, sizeof htmp,
                                           "%X", p[0] << 8 | p[1]);
                               p += 2;
                               strcat(oline, htmp);
                               if (i != 7)
                                      strcat(oline, ":");
                               }
                       }

 

Thanks,

 Vineet

Reply via email to