Commit 0e2d0911 authored by Matt Caswell's avatar Matt Caswell
Browse files

Updates for NumericString support



Ensure that EBCDIC support works and update a comment.

Reviewed-by: default avatarTim Hudson <tjh@openssl.org>
parent 68572c8a
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -78,8 +78,8 @@ static int is_printable(unsigned long value);
/*
 * These functions take a string in UTF8, ASCII or multibyte form and a mask
 * of permissible ASN1 string types. It then works out the minimal type
 * (using the order Printable < IA5 < T61 < BMP < Universal < UTF8) and
 * creates a string of the correct type with the supplied data. Yes this is
 * (using the order Numeric < Printable < IA5 < T61 < BMP < Universal < UTF8)
 * and creates a string of the correct type with the supplied data. Yes this is
 * horrible: it has to be :-( The 'ncopy' form checks minimum and maximum
 * size limits too.
 */
@@ -425,11 +425,21 @@ static int is_printable(unsigned long value)
    return 0;
}

/* Return 1 if the character is a digit or space */
static int is_numeric(unsigned long value)
{
    if (value > '9')
    int ch;
    if (value > 0x7f)
        return 0;
    ch = (int)value;
#ifndef CHARSET_EBCDIC
    if (!isdigit(ch) && ch != ' ')
        return 0;
#else
    if (ch > os_toascii['9'])
        return 0;
    if (value < '0' && value != 32)
    if (ch < os_toascii['0'] && ch != os_toascii[' '])
        return 0;
#endif
    return 1;
}