Add volatile qualifications to two blocks of inline asm to stop GCC from
[oweals/openssl.git] / crypto / evp / encode.c
index 2d738f4b0108fb8c0f98301d2080426dce7f8424..69f7ccad69a697956e5238f84e05fea8cee2206b 100644 (file)
@@ -235,7 +235,7 @@ void EVP_DecodeInit(EVP_ENCODE_CTX *ctx)
 int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
             const unsigned char *in, int inl)
        {
-       int seof= -1,eof=0,rv= -1,ret=0,i,v,tmp,n,ln,tmp2,exp_nl;
+       int seof= -1,eof=0,rv= -1,ret=0,i,v,tmp,n,ln,exp_nl;
        unsigned char *d;
 
        n=ctx->num;
@@ -313,18 +313,18 @@ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
                        /* There will never be more than two '=' */
                        }
 
-               if ((v == B64_EOF) || (n >= 64))
+               if ((v == B64_EOF && (n&3) == 0) || (n >= 64))
                        {
                        /* This is needed to work correctly on 64 byte input
                         * lines.  We process the line and then need to
                         * accept the '\n' */
                        if ((v != B64_EOF) && (n >= 64)) exp_nl=1;
-                       tmp2=v;
                        if (n > 0)
                                {
                                v=EVP_DecodeBlock(out,d,n);
                                n=0;
                                if (v < 0) { rv=0; goto end; }
+                               if (eof > v) { rv=-1; goto end; }
                                ret+=(v-eof);
                                }
                        else