diff --git a/CHANGES b/CHANGES index a57b0fba..26d8f3ff 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,7 @@ What's New for OpenJPEG July 27, 2011 ! [mickael] added new decoding/dump tests based on data found in input/nonregresion repository (remove JPEG2000_CONFORMANCE_DATA_ROOT variable, add REF_DECODER_BIN_PATH variable for the encoder test suite). Remove definitively old tests. +! [mickael] correct some warnings detected under unix platform July 26, 2011 ! [mickael] delete double semi-colon at end of line which generate crash on win platform diff --git a/applications/codec/convert.c b/applications/codec/convert.c index 537f9c60..502539f7 100644 --- a/applications/codec/convert.c +++ b/applications/codec/convert.c @@ -102,7 +102,11 @@ int tga_readheader(FILE *fp, unsigned int *bits_per_pixel, return 0; // Read TGA header - fread((unsigned char*)&tga, sizeof(tga_header), 1, fp); + if ( fread((unsigned char*)&tga, sizeof(tga_header), 1, fp) != 1 ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0 ; + } *bits_per_pixel = tga.pixel_depth; @@ -113,7 +117,12 @@ int tga_readheader(FILE *fp, unsigned int *bits_per_pixel, if (tga.id_length) { unsigned char *id = (unsigned char *) malloc(tga.id_length); - fread(id, tga.id_length, 1, fp); + if ( !fread(id, tga.id_length, 1, fp) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + free(id); + return 0 ; + } free(id); } @@ -246,9 +255,25 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) { for (x=0;xcomps[0].data[index]=r; image->comps[1].data[index]=g; @@ -261,10 +286,30 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) { for (x=0;xcomps[0].data[index]=r; image->comps[1].data[index]=g; @@ -408,10 +453,8 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters) unsigned int j, PAD = 0; int x, y, index; - int gray_scale = 1, not_end_file = 1; + int gray_scale = 1; int has_color; - unsigned int line = 0, col = 0; - unsigned char v, v2; DWORD W, H; IN = fopen(filename, "rb"); @@ -558,7 +601,13 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters) RGB = (unsigned char *) malloc((3 * W + PAD) * H * sizeof(unsigned char)); - fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H, IN); + if ( fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H, IN) != (3 * W + PAD) * H ) + { + free(RGB); + opj_image_destroy(image); + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return NULL; + } index = 0; @@ -641,7 +690,16 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters) RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char)); - fread(RGB, sizeof(unsigned char), W * H, IN); + if ( fread(RGB, sizeof(unsigned char), W * H, IN) != W * H ) + { + free(table_R); + free(table_G); + free(table_B); + free(RGB); + opj_image_destroy(image); + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return NULL; + } if (gray_scale) { index = 0; @@ -680,156 +738,163 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters) }/* RGB8 */ else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1)//RLE8 - { - unsigned char *pix, *beyond; - unsigned int *gray, *red, *green, *blue; - unsigned int x, y, max; - int i, c, c1; - unsigned char uc; + { + unsigned char *pix, *beyond; + int *gray, *red, *green, *blue; + unsigned int x, y, max; + int i, c, c1; + unsigned char uc; - if(Info_h.biClrUsed == 0) Info_h.biClrUsed = 256; - else - if(Info_h.biClrUsed > 256) Info_h.biClrUsed = 256; + if (Info_h.biClrUsed == 0) + Info_h.biClrUsed = 256; + else if (Info_h.biClrUsed > 256) + Info_h.biClrUsed = 256; - table_R = (unsigned char *) malloc(256 * sizeof(unsigned char)); - table_G = (unsigned char *) malloc(256 * sizeof(unsigned char)); - table_B = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_R = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_G = (unsigned char *) malloc(256 * sizeof(unsigned char)); + table_B = (unsigned char *) malloc(256 * sizeof(unsigned char)); - has_color = 0; - for (j = 0; j < Info_h.biClrUsed; j++) - { - table_B[j] = getc(IN); - table_G[j] = getc(IN); - table_R[j] = getc(IN); - getc(IN); - has_color += - !(table_R[j] == table_G[j] && table_R[j] == table_B[j]); + has_color = 0; + for (j = 0; j < Info_h.biClrUsed; j++) + { + table_B[j] = getc(IN); + table_G[j] = getc(IN); + table_R[j] = getc(IN); + getc(IN); + has_color += !(table_R[j] == table_G[j] && table_R[j] == table_B[j]); + } - } - if(has_color) gray_scale = 0; + if (has_color) + gray_scale = 0; - numcomps = gray_scale ? 1 : 3; - color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB; - /* initialize image components */ - memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); - for(i = 0; i < numcomps; i++) - { - cmptparm[i].prec = 8; - cmptparm[i].bpp = 8; - cmptparm[i].sgnd = 0; - cmptparm[i].dx = subsampling_dx; - cmptparm[i].dy = subsampling_dy; - cmptparm[i].w = w; - cmptparm[i].h = h; - } - /* create the image */ - image = opj_image_create(numcomps, &cmptparm[0], color_space); - if(!image) - { - fclose(IN); - free(table_R); free(table_G); free(table_B); - return NULL; - } + numcomps = gray_scale ? 1 : 3; + color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB; + /* initialize image components */ + memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t)); + for (i = 0; i < numcomps; i++) + { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = subsampling_dx; + cmptparm[i].dy = subsampling_dy; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + /* create the image */ + image = opj_image_create(numcomps, &cmptparm[0], color_space); + if (!image) + { + fclose(IN); + free(table_R); + free(table_G); + free(table_B); + return NULL; + } - /* set image offset and reference grid */ - image->x0 = parameters->image_offset_x0; - image->y0 = parameters->image_offset_y0; - image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1; - image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1; + /* set image offset and reference grid */ + image->x0 = parameters->image_offset_x0; + image->y0 = parameters->image_offset_y0; + image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w + - 1) * subsampling_dx + 1; + image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h + - 1) * subsampling_dy + 1; - /* set image data */ - - /* Place the cursor at the beginning of the image information */ - fseek(IN, 0, SEEK_SET); - fseek(IN, File_h.bfOffBits, SEEK_SET); + /* set image data */ - W = Info_h.biWidth; - H = Info_h.biHeight; - RGB = (unsigned char *)calloc(1, W * H * sizeof(unsigned char)); - beyond = RGB + W * H; - pix = beyond - W; - x = y = 0; + /* Place the cursor at the beginning of the image information */ + fseek(IN, 0, SEEK_SET); + fseek(IN, File_h.bfOffBits, SEEK_SET); - while(y < H) - { - c = getc(IN); + W = Info_h.biWidth; + H = Info_h.biHeight; + RGB = (unsigned char *) calloc(1, W * H * sizeof(unsigned char)); + beyond = RGB + W * H; + pix = beyond - W; + x = y = 0; - if (c) - { - c1 = getc(IN); + while (y < H) + { + c = getc(IN); - for (i = 0; i < c && x < W && pix < beyond; i++, x++, pix++) - *pix = c1; - } - else - { - c = getc(IN); + if (c) + { + c1 = getc(IN); - if(c == 0x00) /* EOL */ - { - x = 0; ++y; pix = RGB + x + (H - y - 1) * W; - } + for (i = 0; i < c && x < W && pix < beyond; i++, x++, pix++) + *pix = c1; + } + else + { + c = getc(IN); + + if (c == 0x00) /* EOL */ + { + x = 0; + ++y; + pix = RGB + x + (H - y - 1) * W; + } + else if (c == 0x01) /* EOP */ + break; + else if (c == 0x02) /* MOVE by dxdy */ + { + c = getc(IN); + x += c; + c = getc(IN); + y += c; + pix = RGB + (H - y - 1) * W + x; + } + else /* 03 .. 255 */ + { + i = 0; + for (; i < c && x < W && pix < beyond; i++, x++, pix++) + { + c1 = getc(IN); + *pix = c1; + } + if (c & 1) /* skip padding byte */ + getc(IN); + } + } + }/* while() */ + + if (gray_scale) + { + gray = image->comps[0].data; + pix = RGB; + max = W * H; + + while (max--) + { + uc = *pix++; + + *gray++ = table_R[uc]; + } + } else - if(c == 0x01) /* EOP */ - break; - else - if(c == 0x02) /* MOVE by dxdy */ - { - c = getc(IN); x += c; - c = getc(IN); y += c; - pix = RGB + (H - y - 1) * W + x; - } - else /* 03 .. 255 */ - { - i = 0; - for(; i < c && x < W && pix < beyond; i++, x++, pix++) - { - c1 = getc(IN); - *pix = c1; - } - if(c & 1) /* skip padding byte */ - getc(IN); - } - } - }/* while() */ + { + //int *red, *green, *blue; - if (gray_scale) - { - int *gray; + red = image->comps[0].data; + green = image->comps[1].data; + blue = image->comps[2].data; + pix = RGB; + max = W * H; - gray = image->comps[0].data; - pix = RGB; - max = W * H; + while (max--) + { + uc = *pix++; - while(max--) - { - uc = *pix++; - - *gray++ = table_R[uc]; - } - } - else - { - int *red, *green, *blue; - - red = image->comps[0].data; - green = image->comps[1].data; - blue = image->comps[2].data; - pix = RGB; - max = W * H; - - while(max--) - { - uc = *pix++; - - *red++ = table_R[uc]; - *green++ = table_G[uc]; - *blue++ = table_B[uc]; - } - } - free(RGB); - free(table_R); free(table_G); free(table_B); - }/* RLE8 */ + *red++ = table_R[uc]; + *green++ = table_G[uc]; + *blue++ = table_B[uc]; + } + } + free(RGB); + free(table_R); + free(table_G); + free(table_B); + }/* RLE8 */ else { fprintf(stderr, @@ -1007,7 +1072,6 @@ int imagetobmp(opj_image_t * image, const char *outfile) { } for (i = 0; i < w * h; i++) { - unsigned char rc; int r; r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)]; @@ -1038,15 +1102,27 @@ PGX IMAGE FORMAT unsigned char readuchar(FILE * f) { unsigned char c1; - fread(&c1, 1, 1, f); + if ( !fread(&c1, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } return c1; } unsigned short readushort(FILE * f, int bigendian) { unsigned char c1, c2; - fread(&c1, 1, 1, f); - fread(&c2, 1, 1, f); + if ( !fread(&c1, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } + if ( !fread(&c2, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } if (bigendian) return (c1 << 8) + c2; else @@ -1056,10 +1132,26 @@ unsigned short readushort(FILE * f, int bigendian) unsigned int readuint(FILE * f, int bigendian) { unsigned char c1, c2, c3, c4; - fread(&c1, 1, 1, f); - fread(&c2, 1, 1, f); - fread(&c3, 1, 1, f); - fread(&c4, 1, 1, f); + if ( !fread(&c1, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } + if ( !fread(&c2, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } + if ( !fread(&c3, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } + if ( !fread(&c4, 1, 1, f) ) + { + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); + return 0; + } if (bigendian) return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; else @@ -1097,6 +1189,7 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) { fseek(f, 0, SEEK_SET); fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d",temp,&endian1,&endian2,signtmp,&prec,temp,&w,temp,&h); + i=0; sign='+'; while (signtmp[i]!='\0') { @@ -1308,7 +1401,14 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph) char idf[256], type[256]; char line[256]; - fgets(line, 250, reader); + char* return_value_fgets = fgets(line, 250, reader); + if (!strcmp(return_value_fgets,line)) + { + fprintf(stderr,"\nWARNING: fgets return a value different that the first argument"); + free(return_value_fgets); + return; + } + free(return_value_fgets); if(line[0] != 'P') { @@ -1563,7 +1663,8 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) { for(compno = 0; compno < numcomps; compno++) { index = 0; - fscanf(fp, "%u", &index); + if (fscanf(fp, "%u", &index) != 1) + fprintf(stderr, "\nWARNING: fscanf return a number of element different from the expected.\n"); image->comps[compno].data[i] = (index * 255)/header_info.maxval; } @@ -1584,14 +1685,16 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) { { for(compno = 0; compno < numcomps; compno++) { - fread(&c0, 1, 1, fp); + if ( !fread(&c0, 1, 1, fp) ) + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); if(one) { image->comps[compno].data[i] = c0; } else { - fread(&c1, 1, 1, fp); + if ( !fread(&c1, 1, 1, fp) ) + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); /* netpbm: */ image->comps[compno].data[i] = ((c0<<8) | c1); } @@ -1605,7 +1708,8 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) { { unsigned int index; - fscanf(fp, "%u", &index); + if ( fscanf(fp, "%u", &index) != 1) + fprintf(stderr, "\nWARNING: fscanf return a number of element different from the expected.\n"); image->comps[0].data[i] = (index?0:255); } @@ -1640,7 +1744,8 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) { for(i = 0; i < w * h; ++i) { - fread(&uc, 1, 1, fp); + if ( !fread(&uc, 1, 1, fp) ) + fprintf(stderr, "\nError: fread return a number of element different from the expected.\n"); image->comps[0].data[i] = (uc & 1)?0:255; } } diff --git a/applications/codec/image_to_j2k.c b/applications/codec/image_to_j2k.c index 1e1cfbf4..e19ecdb7 100644 --- a/applications/codec/image_to_j2k.c +++ b/applications/codec/image_to_j2k.c @@ -1482,7 +1482,7 @@ int main(int argc, char **argv) { opj_image_t *image = NULL; int i,num_images; int imageno; - dircnt_t *dirptr; + dircnt_t *dirptr = NULL; raw_cparameters_t raw_cp; opj_codestream_info_t cstr_info; /* Codestream information structure */ char indexfilename[OPJ_PATH_LEN]; /* index file name */ diff --git a/applications/codec/j2k_dump.c b/applications/codec/j2k_dump.c index eaf1b34b..170c4324 100644 --- a/applications/codec/j2k_dump.c +++ b/applications/codec/j2k_dump.c @@ -412,7 +412,13 @@ int main(int argc, char *argv[]) file_length = ftell(fsrc); fseek(fsrc, 0, SEEK_SET); src = (unsigned char *) malloc(file_length); - fread(src, 1, file_length, fsrc); + if (fread(src, 1, file_length, fsrc) != file_length) + { + free(src); + fclose(fsrc); + fprintf(stderr, "\nERROR: fread return a number of element different from the expected.\n"); + return 1; + } fclose(fsrc); /* decode the code-stream */ diff --git a/applications/codec/j2k_to_image.c b/applications/codec/j2k_to_image.c index bc9ef7dd..b8f237bd 100644 --- a/applications/codec/j2k_to_image.c +++ b/applications/codec/j2k_to_image.c @@ -521,7 +521,7 @@ int main(int argc, char **argv) { int file_length; int num_images; int i,imageno; - dircnt_t *dirptr; + dircnt_t *dirptr = NULL; opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ opj_cio_t *cio = NULL; opj_codestream_info_t cstr_info; /* Codestream information structure */ @@ -595,7 +595,13 @@ int main(int argc, char **argv) { file_length = ftell(fsrc); fseek(fsrc, 0, SEEK_SET); src = (unsigned char *) malloc(file_length); - fread(src, 1, file_length, fsrc); + if (fread(src, 1, file_length, fsrc) != file_length) + { + free(src); + fclose(fsrc); + fprintf(stderr, "\nERROR: fread return a number of element different from the expected.\n"); + return 1; + } fclose(fsrc); /* decode the code-stream */ diff --git a/tests/compare_dump_files.c b/tests/compare_dump_files.c index 2340dfb7..42ef2fbb 100644 --- a/tests/compare_dump_files.c +++ b/tests/compare_dump_files.c @@ -164,6 +164,7 @@ int main(int argc, char **argv) size_t nbytes = 2048; int CRLF_shift=1; char *strbase, *strtest, *strbase_d, *strtest_d; + char *return_value_fgets; printf("Files differ at line %lu:\n", l); fseek(fbase,pos,SEEK_SET); @@ -179,8 +180,17 @@ int main(int argc, char **argv) strbase = (char *) malloc(nbytes + 1); strtest = (char *) malloc(nbytes + 1); - fgets(strbase, nbytes, fbase); - fgets(strtest, nbytes, ftest); + + return_value_fgets = fgets(strbase, nbytes, fbase); + if (!strcmp(return_value_fgets,strbase)) + fprintf(stderr,"\nWARNING: fgets return a value different that the first argument"); + free(return_value_fgets); + + return_value_fgets = fgets(strtest, nbytes, ftest); + if (!strcmp(return_value_fgets,strtest)) + fprintf(stderr,"\nWARNING: fgets return a value different that the first argument"); + free(return_value_fgets); + strbase_d = (char *) malloc(strlen(strbase)+1); strtest_d = (char *) malloc(strlen(strtest)+1); strncpy(strbase_d, strbase, strlen(strbase)-1); diff --git a/tests/nonregression/CMakeLists.txt b/tests/nonregression/CMakeLists.txt index 18e57244..f8a67ceb 100644 --- a/tests/nonregression/CMakeLists.txt +++ b/tests/nonregression/CMakeLists.txt @@ -15,7 +15,6 @@ FILE(GLOB_RECURSE OPJ_DATA_NR_LIST FOREACH(filepath ${OPJ_DATA_NR_LIST}) GET_FILENAME_COMPONENT(filename ${filepath} NAME) GET_FILENAME_COMPONENT(filenameSub ${filename} NAME_WE) - message("${filenameSub}") ADD_TEST(NR-${filename}-dump ${EXECUTABLE_OUTPUT_PATH}/j2k_dump