Skip to content

Commit

Permalink
opj_mj2_extract: Check provided output prefix for length
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
kbabioch authored and rouault committed Sep 22, 2018
1 parent 564fbfb commit cc38247
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/bin/mj2/opj_mj2_extract.c
Expand Up @@ -140,10 +140,21 @@ int main(int argc, char *argv[])
fread(frame_codestream, sample->sample_size - 8, 1,
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");
if (!outfile) {
fprintf(stderr, "failed to open %s for writing\n", outfilename);
free(frame_codestream);
return 1;
}
fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
Expand Down

0 comments on commit cc38247

Please sign in to comment.