Blame SOURCES/libgcrypt-1.5.2-mpicoder-gccopt.patch

241384
diff -up libgcrypt-1.5.2/mpi/mpicoder.c.gccopt libgcrypt-1.5.2/mpi/mpicoder.c
241384
--- libgcrypt-1.5.2/mpi/mpicoder.c.gccopt	2013-04-18 16:48:42.000000000 +0200
241384
+++ libgcrypt-1.5.2/mpi/mpicoder.c	2013-06-20 10:24:57.241510589 +0200
241384
@@ -555,16 +555,16 @@ gcry_mpi_print (enum gcry_mpi_format for
241384
           extra=1;
241384
 	}
241384
 
241384
-      if (buffer && n > len)
241384
-        {
241384
-          /* The provided buffer is too short. */
241384
-          gcry_free (tmp);
241384
-          return gcry_error (GPG_ERR_TOO_SHORT);
241384
-	}
241384
       if (buffer)
241384
         {
241384
           unsigned char *s = buffer;
241384
 
241384
+          if (n > len)
241384
+            {
241384
+              /* The provided buffer is too short. */
241384
+              gcry_free (tmp);
241384
+              return gcry_error (GPG_ERR_TOO_SHORT);
241384
+            }
241384
           if (extra)
241384
             *s++ = 0;
241384
           memcpy (s, tmp, n-extra);
241384
@@ -580,12 +580,12 @@ gcry_mpi_print (enum gcry_mpi_format for
241384
       /* Note:  We ignore the sign for this format.  */
241384
       /* FIXME: for performance reasons we should put this into
241384
 	 mpi_aprint because we can then use the buffer directly.  */
241384
-      if (buffer && n > len)
241384
-        return gcry_error (GPG_ERR_TOO_SHORT);
241384
       if (buffer)
241384
         {
241384
           unsigned char *tmp;
241384
 
241384
+          if (n > len)
241384
+            return gcry_error (GPG_ERR_TOO_SHORT);
241384
           tmp = _gcry_mpi_get_buffer (a, &n, NULL);
241384
           if (!tmp)
241384
             return gpg_error_from_syserror ();
241384
@@ -603,14 +603,13 @@ gcry_mpi_print (enum gcry_mpi_format for
241384
       if( a->sign )
241384
         return gcry_error (GPG_ERR_INV_ARG);
241384
 
241384
-      if (buffer && n+2 > len)
241384
-        return gcry_error (GPG_ERR_TOO_SHORT);
241384
-
241384
       if (buffer)
241384
         {
241384
           unsigned char *tmp;
241384
           unsigned char *s = buffer;
241384
 
241384
+          if (n+2 > len)
241384
+            return gcry_error (GPG_ERR_TOO_SHORT);
241384
           s[0] = nbits >> 8;
241384
           s[1] = nbits;
241384
 
241384
@@ -641,16 +640,16 @@ gcry_mpi_print (enum gcry_mpi_format for
241384
           extra=1;
241384
 	}
241384
 
241384
-      if (buffer && n+4 > len)
241384
-        {
241384
-          gcry_free(tmp);
241384
-          return gcry_error (GPG_ERR_TOO_SHORT);
241384
-	}
241384
-
241384
       if (buffer)
241384
         {
241384
           unsigned char *s = buffer;
241384
 
241384
+          if (n+4 > len)
241384
+            {
241384
+              gcry_free(tmp);
241384
+              return gcry_error (GPG_ERR_TOO_SHORT);
241384
+            }
241384
+
241384
           *s++ = n >> 24;
241384
           *s++ = n >> 16;
241384
           *s++ = n >> 8;
241384
@@ -677,15 +676,15 @@ gcry_mpi_print (enum gcry_mpi_format for
241384
       if (!n || (*tmp & 0x80))
241384
         extra = 2;
241384
 
241384
-      if (buffer && 2*n + extra + !!a->sign + 1 > len)
241384
-        {
241384
-          gcry_free(tmp);
241384
-          return gcry_error (GPG_ERR_TOO_SHORT);
241384
-	}
241384
       if (buffer)
241384
         {
241384
           unsigned char *s = buffer;
241384
 
241384
+          if (2*n + extra + !!a->sign + 1 > len)
241384
+            {
241384
+              gcry_free(tmp);
241384
+              return gcry_error (GPG_ERR_TOO_SHORT);
241384
+            }
241384
           if (a->sign)
241384
             *s++ = '-';
241384
           if (extra)