diff --git a/tool/util.c b/tool/util.c index b297aa1..af78260 100644 --- a/tool/util.c +++ b/tool/util.c @@ -91,10 +91,18 @@ unsigned char get_algorithm(EVP_PKEY *key) { } } -X509_NAME *parse_name(char *name) { +X509_NAME *parse_name(const char *orig_name) { + char name[1025]; X509_NAME *parsed = NULL; char *ptr = name; char *part; + + if(strlen(orig_name) > 1024) { + fprintf(stderr, "Name is to long!\n"); + return NULL; + } + strcpy(name, orig_name); + if(*name != '/') { fprintf(stderr, "Name does not start with '/'!\n"); return NULL; diff --git a/tool/util.h b/tool/util.h index 03e2ca2..33c89d4 100644 --- a/tool/util.h +++ b/tool/util.h @@ -50,7 +50,7 @@ typedef union u_APDU APDU; void dump_hex(unsigned const char*, unsigned int); int set_length(unsigned char*, int); int get_length(unsigned char*, int*); -X509_NAME *parse_name(char*); +X509_NAME *parse_name(const char*); unsigned char get_algorithm(EVP_PKEY*); FILE *open_file(const char*, int); int get_object_id(enum enum_slot slot);