Fix numeric -newkey args.
[openssl.git] / apps / req.c
index 525995dd51a3e44ce298339844aee4e6ff0f3bad..f37616feffe910088fcc7133c87673389135eba2 100644 (file)
@@ -221,13 +221,16 @@ char **argv;
                        }
                else if (strcmp(*argv,"-newkey") == 0)
                        {
+                       int is_numeric;
+
                        if (--argc < 1) goto bad;
                        p= *(++argv);
-                       if ((strncmp("rsa:",p,4) == 0) ||
-                               ((p[0] >= '0') && (p[0] <= '9')))
+                       is_numeric = p[0] >= '0' && p[0] <= '9';
+                       if (strncmp("rsa:",p,4) == 0 || is_numeric)
                                {
                                pkey_type=TYPE_RSA;
-                               p+=4;
+                               if(!is_numeric)
+                                   p+=4;
                                newkey= atoi(p);
                                }
                        else
@@ -624,6 +627,7 @@ loop:
                        }
                if (x509)
                        {
+                       EVP_PKEY *tmppkey;
                        if ((x509ss=X509_new()) == NULL) goto end;
 
                        /* don't set the version number, for starters
@@ -639,7 +643,9 @@ loop:
                                (long)60*60*24*days);
                        X509_set_subject_name(x509ss,
                                X509_REQ_get_subject_name(req));
-                       X509_set_pubkey(x509ss,X509_REQ_get_pubkey(req));
+                       tmppkey = X509_REQ_get_pubkey(req);
+                       X509_set_pubkey(x509ss,tmppkey);
+                       EVP_PKEY_free(tmppkey);
 
                        if (!(i=X509_sign(x509ss,pkey,digest)))
                                goto end;