Skip to content

Commit

Permalink
Merge branch 'tiffcrop_fix_#411_#413' into 'master'
Browse files Browse the repository at this point in the history
tiffcrop: disable incompatibility of -Z, -X, -Y, -z options with any PAGE_MODE_x option (fixes #411, #413 and #426)

Closes #426, #413 et #411

See merge request libtiff/libtiff!383
  • Loading branch information
rouault committed Oct 12, 2022
2 parents a5c5965 + 4746f16 commit 236b719
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
8 changes: 8 additions & 0 deletions doc/tools/tiffcrop.rst
Expand Up @@ -415,6 +415,14 @@ Options
Note: :program:`tiffcrop` may be compiled with :command:`-DDEVELMODE` to enable
additional very low level debug reporting.

However, not all option combinations are permitted.

Note 1: The (-X|-Y), -Z, -z and -S options are mutually exclusive.
In no case should the options be applied to a given selection successively.

Note 2: Any of the -X, -Y, -Z and -z options together with other PAGE_MODE_x options
such as -H, -V, -P, -J or -K are not supported and may cause buffer overflows.

Examples
--------

Expand Down
32 changes: 25 additions & 7 deletions tools/tiffcrop.c
Expand Up @@ -107,13 +107,15 @@
* selects which functions dump data, with higher numbers selecting
* lower level, scanline level routines. Debug reports a limited set
* of messages to monitor progress without enabling dump logs.
*
* Note: The (-X|-Y), -Z, -z and -S options are mutually exclusive.
*
* Note 1: The (-X|-Y), -Z, -z and -S options are mutually exclusive.
* In no case should the options be applied to a given selection successively.
*/
* Note 2: Any of the -X, -Y, -Z and -z options together with other PAGE_MODE_x options
* such as -H, -V, -P, -J or -K are not supported and may cause buffer overflows.
*/

static char tiffcrop_version_id[] = "2.5.1";
static char tiffcrop_rev_date[] = "15-08-2022";
static char tiffcrop_version_id[] = "2.5.3";
static char tiffcrop_rev_date[] = "26-08-2022";

#include "tif_config.h"
#include "libport.h"
Expand Down Expand Up @@ -781,9 +783,12 @@ static const char usage_info[] =
" The four debug/dump options are independent, though it makes little sense to\n"
" specify a dump file without specifying a detail level.\n"
"\n"
"Note: The (-X|-Y), -Z, -z and -S options are mutually exclusive.\n"
"Note 1: The (-X|-Y), -Z, -z and -S options are mutually exclusive.\n"
" In no case should the options be applied to a given selection successively.\n"
"\n"
"Note 2: Any of the -X, -Y, -Z and -z options together with other PAGE_MODE_x options\n"
" such as - H, -V, -P, -J or -K are not supported and may cause buffer overflows.\n"
"\n"
;

/* This function could be modified to pass starting sample offset
Expand Down Expand Up @@ -2138,9 +2143,20 @@ void process_command_opts (int argc, char *argv[], char *mp, char *mode, uint32
R = (crop_data->crop_mode & CROP_REGIONS) ? 1 : 0;
S = (page->mode & PAGE_MODE_ROWSCOLS) ? 1 : 0;
if (XY + Z + R + S > 1) {
TIFFError("tiffcrop input error", "The crop options(-X|-Y), -Z, -z and -S are mutually exclusive.->Exit");
TIFFError("tiffcrop input error", "The crop options(-X|-Y), -Z, -z and -S are mutually exclusive.->exit");
exit(EXIT_FAILURE);
}

/* Check for not allowed combination:
* Any of the -X, -Y, -Z and -z options together with other PAGE_MODE_x options
* such as -H, -V, -P, -J or -K are not supported and may cause buffer overflows.
. */
if ((XY + Z + R > 0) && page->mode != PAGE_MODE_NONE) {
TIFFError("tiffcrop input error",
"Any of the crop options -X, -Y, -Z and -z together with other PAGE_MODE_x options such as - H, -V, -P, -J or -K is not supported and may cause buffer overflows..->exit");
exit(EXIT_FAILURE);
}

} /* end process_command_opts */

/* Start a new output file if one has not been previously opened or
Expand Down Expand Up @@ -2411,6 +2427,7 @@ main(int argc, char* argv[])
exit (EXIT_FAILURE);
}

/* Crop input image and copy zones and regions from input image into seg_buffs or crop_buff. */
if (crop.selections > 0)
{
if (processCropSelections(&image, &crop, &read_buff, seg_buffs))
Expand All @@ -2427,6 +2444,7 @@ main(int argc, char* argv[])
exit (EXIT_FAILURE);
}
}
/* Format and write selected image parts to output file(s). */
if (page.mode == PAGE_MODE_NONE)
{ /* Whole image or sections not based on output page size */
if (crop.selections > 0)
Expand Down

0 comments on commit 236b719

Please sign in to comment.