Ignore final '\n' when checking if hex line length is odd.
authorDr. Stephen Henson <steve@openssl.org>
Tue, 15 Feb 2011 15:56:13 +0000 (15:56 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 15 Feb 2011 15:56:13 +0000 (15:56 +0000)
fips/fips_utl.h

index 3b8100c..98cb591 100644 (file)
@@ -98,9 +98,16 @@ static void fips_set_error_print(void)
 
 int hex2bin(const char *in, unsigned char *out)
     {
 
 int hex2bin(const char *in, unsigned char *out)
     {
-    int n1, n2;
+    int n1, n2, isodd = 0;
     unsigned char ch;
 
     unsigned char ch;
 
+    n1 = strlen(in);
+    if (in[n1 - 1] == '\n')
+       n1--;
+
+    if (n1 & 1)
+       isodd = 1;
+
     for (n1=0,n2=0 ; in[n1] && in[n1] != '\n' ; )
        { /* first byte */
        if ((in[n1] >= '0') && (in[n1] <= '9'))
     for (n1=0,n2=0 ; in[n1] && in[n1] != '\n' ; )
        { /* first byte */
        if ((in[n1] >= '0') && (in[n1] <= '9'))
@@ -120,7 +127,7 @@ int hex2bin(const char *in, unsigned char *out)
         * all digits valid hex and null terminated which is true for the
         * strings we pass.
         */
         * all digits valid hex and null terminated which is true for the
         * strings we pass.
         */
-       if (n1 == 1 && strlen(in) & 1)
+       if (n1 == 1 && isodd)
                {
                out[n2++] = ch;
                continue;
                {
                out[n2++] = ch;
                continue;