opj_mj2_extract: Check provided output prefix for length
This uses snprintf() with correct buffer length instead of sprintf(), which prevents a buffer overflow when providing a long output prefix. Furthermore the program exits with an error when the provided output prefix is too long. Fixes #1088.
This commit is contained in:
parent
564fbfb678
commit
cc3824767b
|
@ -140,10 +140,21 @@ int main(int argc, char *argv[])
|
||||||
fread(frame_codestream, sample->sample_size - 8, 1,
|
fread(frame_codestream, sample->sample_size - 8, 1,
|
||||||
file); /* Assuming that jp and ftyp markers size do*/
|
file); /* Assuming that jp and ftyp markers size do*/
|
||||||
|
|
||||||
sprintf(outfilename, "%s_%05d.j2k", argv[2], snum);
|
{
|
||||||
|
int num = snprintf(outfilename, sizeof(outfilename),
|
||||||
|
"%s_%05d.j2k", argv[2],
|
||||||
|
snum);
|
||||||
|
if (num >= sizeof(outfilename)) {
|
||||||
|
fprintf(stderr, "maximum length of output prefix exceeded\n");
|
||||||
|
free(frame_codestream);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
outfile = fopen(outfilename, "wb");
|
outfile = fopen(outfilename, "wb");
|
||||||
if (!outfile) {
|
if (!outfile) {
|
||||||
fprintf(stderr, "failed to open %s for writing\n", outfilename);
|
fprintf(stderr, "failed to open %s for writing\n", outfilename);
|
||||||
|
free(frame_codestream);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
|
fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
|
||||||
|
|
Loading…
Reference in New Issue