diff options
Diffstat (limited to 'converter/ppm/ximtoppm.c')
-rw-r--r-- | converter/ppm/ximtoppm.c | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/converter/ppm/ximtoppm.c b/converter/ppm/ximtoppm.c index 6cd470e9..d844031c 100644 --- a/converter/ppm/ximtoppm.c +++ b/converter/ppm/ximtoppm.c @@ -102,6 +102,11 @@ ReadXimHeader(FILE * const in_fp, pm_message("ReadXimHeader: unable to read file header" ); return(0); } + /* Force broken ASCIIZ strings to at least be valid ASCIIZ */ + a_head.author [sizeof(a_head.author) - 1] = '\0'; + a_head.date [sizeof(a_head.date) - 1] = '\0'; + a_head.program[sizeof(a_head.program) - 1] = '\0'; + if (atoi(a_head.header_size) != sizeof(ImageHeader)) { pm_message("ReadXimHeader: header size mismatch" ); return(0); @@ -115,35 +120,15 @@ ReadXimHeader(FILE * const in_fp, header->ncolors = atoi(a_head.num_colors); header->nchannels = atoi(a_head.num_channels); header->bytes_per_line = atoi(a_head.bytes_per_line); -/* header->npics = atoi(a_head.num_pictures); */ +#if 0 + header->npics = atoi(a_head.num_pictures); +#endif header->bits_channel = atoi(a_head.bits_per_channel); header->alpha_flag = atoi(a_head.alpha_channel); - if (strlen(a_head.author)) { - if (!(header->author = calloc((unsigned int)strlen(a_head.author)+1, - 1))) { - pm_message("ReadXimHeader: can't calloc author string" ); - return(0); - } - header->width = atoi(a_head.image_width); - strncpy(header->author, a_head.author, strlen(a_head.author)); - } - if (strlen(a_head.date)) { - if (!(header->date =calloc((unsigned int)strlen(a_head.date)+1,1))){ - pm_message("ReadXimHeader: can't calloc date string" ); - return(0); - } - header->width = atoi(a_head.image_width); - strncpy(header->date, a_head.date, strlen(a_head.date)); - } - if (strlen(a_head.program)) { - if (!(header->program = calloc( - (unsigned int)strlen(a_head.program) + 1, 1))) { - pm_message("ReadXimHeader: can't calloc program string" ); - return(0); - } - header->width = atoi(a_head.image_width); - strncpy(header->program, a_head.program,strlen(a_head.program)); - } + pm_asprintf(&header->author, a_head.author); + pm_asprintf(&header->date, a_head.date); + pm_asprintf(&header->program, a_head.program); + /* Do double checking for backwards compatibility */ if (header->npics == 0) header->npics = 1; |