Ignore final '\n' when checking if hex line length is odd.
[openssl.git] / fips / fips_utl.h
index 3b8100cafab17353deb90d6c23ace10655914d94..98cb5915a23cc98735b940d39252d335487f9ab0 100644 (file)
@@ -98,9 +98,16 @@ static void fips_set_error_print(void)
 
 int hex2bin(const char *in, unsigned char *out)
     {
-    int n1, n2;
+    int n1, n2, isodd = 0;
     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'))
@@ -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.
         */
-       if (n1 == 1 && strlen(in) & 1)
+       if (n1 == 1 && isodd)
                {
                out[n2++] = ch;
                continue;