Browse Source

- replaced useless tifp_check() function by a macro. The macrocode will only be activated if the preprocessor option HARDEN is set

development
Andreas Romeyke 2 years ago
parent
commit
375c75fde1
22 changed files with 62 additions and 52 deletions
  1. +13
    -1
      src/headers/check.h
  2. +2
    -0
      src/helper/check_print.c
  3. +11
    -9
      src/helper/check_tiffparse.c
  4. +2
    -2
      src/ifdrules/check_all_IFDs_are_word_aligned.c
  5. +2
    -2
      src/ifdrules/check_all_geotiff_tags.c
  6. +2
    -2
      src/ifdrules/check_all_offsets_are_used_once_only.c
  7. +2
    -2
      src/ifdrules/check_all_offsets_are_word_aligned.c
  8. +2
    -2
      src/ifdrules/check_all_offsets_greater_zero.c
  9. +2
    -2
      src/ifdrules/check_has_only_one_ifd.c
  10. +2
    -2
      src/ifdrules/check_tagorder.c
  11. +2
    -4
      src/tagrules/check_datetime.c
  12. +2
    -2
      src/tagrules/check_icc.c
  13. +2
    -2
      src/tagrules/check_notag.c
  14. +2
    -2
      src/tagrules/check_tag_has_some_of_these_values.c
  15. +2
    -2
      src/tagrules/check_tag_has_valid_asciivalue.c
  16. +2
    -3
      src/tagrules/check_tag_has_valid_type.c
  17. +0
    -1
      src/tagrules/check_tag_has_value.c
  18. +2
    -2
      src/tagrules/check_tag_has_value_in_range.c
  19. +2
    -2
      src/tagrules/check_tag_has_value_matching_regex.c
  20. +2
    -2
      src/tagrules/check_tag_has_value_quiet.c
  21. +2
    -3
      src/tagrules/check_tag_has_valuelist.c
  22. +2
    -3
      src/tagrules/check_tag_quiet.c

+ 13
- 1
src/headers/check.h View File

@ -230,7 +230,19 @@ typedef struct mem_map_s {
#define VALUESTRLEN 500
#define TIFFAILSTRLEN (EXPECTSTRLEN + VALUESTRLEN)
#define MAXRESULT 200000
returncode_t tifp_check( ctiff_t * ctif);
#ifdef HARDEN
#define TIFP_CHECK( ctif, ret ) \
if (NULL == ctif) { ret.returncode = code_error_ctif_empty; ret.value_found="code error, empty ctif-structure"; return ret; };\
if ((0 > ctif->fd) && (NULL == ctif->streamp)) {\
if (0 > ctif->fd) { ret.returncode = code_error_filedescriptor_empty; ret.value_found="empty filedescriptor"; return ret; };\
if (NULL == ctif->streamp) { ret.returncode = code_error_streampointer_empty; ret.value_found="empty stream pointer"; return ret; }; \
}
#else
#define TIFP_CHECK( ctif, ret ) ;
#endif
//returncode_t tifp_check( ctiff_t * ctif);
/*
ret_t tif_returns(tag_t tag, const char* expected, const char* value);
ret_t tif_fails_tag(tag_t tag, const char* expected, const char* value);


+ 2
- 0
src/helper/check_print.c View File

@ -72,11 +72,13 @@ void __clean_render_pipeline( retmsg_t ** pointer ) {
}
}
/*
returncode_t tifp_check( ctiff_t * ctif) {
if (NULL == ctif) { return code_error_ctif_empty; };
if (0 > ctif->fd) { return code_error_filedescriptor_empty; };
if (NULL == ctif->streamp) { return code_error_streampointer_empty; };
return should_not_occur;
}
*/
/* vim: set tabstop=2 softtabstop=2 shiftwidth=2 smarttab expandtab :*/

+ 11
- 9
src/helper/check_tiffparse.c View File

@ -149,8 +149,8 @@ int TIFFGetRawTagListIndex(ctiff_t * ctif, tag_t tag) { /* find n-th entry in IF
//------------------------------------------------------------------------------
ret_t check_tag_has_fvalue(ctiff_t * ctif, tag_t tag, float value) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
float * valp = NULL;
uint32 found;
@ -172,8 +172,8 @@ ret_t check_tag_has_fvalue(ctiff_t * ctif, tag_t tag, float value) {
//------------------------------------------------------------------------------
ret_t check_tag_has_u16value(ctiff_t * ctif, tag_t tag, uint16 value) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
uint16 * valp = NULL;
uint32 found;
@ -198,9 +198,8 @@ ret_t check_tag_has_u16value(ctiff_t * ctif, tag_t tag, uint16 value) {
//------------------------------------------------------------------------------
ret_t check_tag_has_u32value(ctiff_t * ctif, tag_t tag, uint32 value) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
uint32 * valp = NULL;
uint32 found;
@ -223,7 +222,8 @@ ret_t check_tag_has_u32value(ctiff_t * ctif, tag_t tag, uint32 value) {
ret_t parse_header_and_endianess(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
/* seek the image file directory (bytes 4-7) */
//ct_seek(fd, (off_t) 0, SEEK_SET);
@ -291,7 +291,9 @@ ret_t parse_header_and_endianess(ctiff_t * ctif) {
}
ret_t get_first_IFD(ctiff_t * ctif, uint32 * ifd) {
GET_EMPTY_RET(ret)
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
int isByteSwapped = ctif->isbyteswapped;
/* seek the image file directory (bytes 4-7) */
if (ct_seek(ctif, 4, SEEK_SET) != 4 ) {


+ 2
- 2
src/ifdrules/check_all_IFDs_are_word_aligned.c View File

@ -14,8 +14,8 @@
/* check if IFDs are word aligned */
ret_t check_all_IFDs_are_word_aligned(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
uint32 ifd = get_ifd0_pos( ctif ); /* TODO: check all other IFDs, too */
if ( 0 != (ifd & 1)) {


+ 2
- 2
src/ifdrules/check_all_geotiff_tags.c View File

@ -52,8 +52,8 @@
*/
ret_t check_all_geotiff_tags(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
/* first, detect if geokey directory tag exists */
/* mark n
* find offset for geokeys


+ 2
- 2
src/ifdrules/check_all_offsets_are_used_once_only.c View File

@ -13,8 +13,8 @@
/* check if offsets are used only once */
ret_t check_all_offsets_are_used_once_only(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
uint16 count = get_ifd0_count( ctif);
if (count > 0) {
uint16 tagidx;


+ 2
- 2
src/ifdrules/check_all_offsets_are_word_aligned.c View File

@ -13,8 +13,8 @@
/* check if offsets are word aligned */
ret_t check_all_offsets_are_word_aligned(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
uint16 count = get_ifd0_count( ctif);
int tagidx;
for (tagidx = 0; tagidx< count; tagidx++) {


+ 2
- 2
src/ifdrules/check_all_offsets_greater_zero.c View File

@ -13,8 +13,8 @@
/* check if offsets are greater zero */
ret_t check_all_offsets_are_greater_zero(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
uint16 count = get_ifd0_count( ctif);
int tagidx;
for (tagidx = 0; tagidx< count; tagidx++) {


+ 2
- 2
src/ifdrules/check_has_only_one_ifd.c View File

@ -12,8 +12,8 @@
/* check if only one IFD exists */
ret_t check_has_only_one_ifd(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
/* next commented lines, because TIFFNumberOfDirectories are in endless loop,
* if the TIFF file from https://github.com/EasyinnovaSL/DPFManager/blob/develop/src/test/resources/IFD%20struct/Circular%20E.tif
*/


+ 2
- 2
src/ifdrules/check_tagorder.c View File

@ -12,8 +12,8 @@
#include <errno.h>
ret_t check_tagorder(ctiff_t * ctif) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
if (has_sorted_tags != ctif->tagorder) {
uint32 offset = get_ifd0_pos(ctif);
uint16 count = get_ifd0_count(ctif);


+ 2
- 4
src/tagrules/check_datetime.c View File

@ -49,10 +49,8 @@ int test_plausibility (int * year, int * month, int * day, int * hour, int * min
* @param filename filename which should be processed, repaired
*/
ret_t check_datetime(ctiff_t * ctif ) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret_t rc=check_tag_quiet(ctif, TIFFTAG_DATETIME);
if (rc.returncode != is_valid) return rc;


+ 2
- 2
src/tagrules/check_icc.c View File

@ -13,8 +13,8 @@
/** checks a ICC tag, see Annex B of http://www.color.org/specification/ICC1v43_2010-12.pdf
*/
ret_t check_icc(ctiff_t * ctif ) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret=check_tag_quiet(ctif, TIFFTAG_ICCPROFILE);
if (ret.returncode != is_valid) return ret;


+ 2
- 2
src/tagrules/check_notag.c View File

@ -13,8 +13,8 @@
/* checks if TIF does not have a specified tag,
* needed only for checks to ensure whitelist */
ret_t check_notag(ctiff_t * ctif, tag_t tag) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
if (-1 == TIFFGetRawTagListIndex(ctif, tag)) {
ret.returncode = is_valid;
} else {


+ 2
- 2
src/tagrules/check_tag_has_some_of_these_values.c View File

@ -14,8 +14,8 @@
*/
ret_t check_tag_has_some_of_these_values(ctiff_t * ctif, tag_t tag, int count, const unsigned int * values) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret=check_tag_quiet(ctif, tag);
if (ret.returncode != is_valid) return ret;
const unsigned int * p = values;


+ 2
- 2
src/tagrules/check_tag_has_valid_asciivalue.c View File

@ -14,8 +14,8 @@
/* checks if TIF with tag and type ASCII */
ret_t check_tag_has_valid_asciivalue(ctiff_t * ctif, tag_t tag) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret=check_tag_quiet(ctif, tag);
if (ret.returncode != is_valid) return ret;


+ 2
- 3
src/tagrules/check_tag_has_valid_type.c View File

@ -13,9 +13,8 @@
/* checks if TIF has a specified tag */
ret_t check_tag_has_valid_type(ctiff_t * ctif, tag_t tag) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret=check_tag_quiet(ctif, tag);
assert(ret.returncode != should_not_occur);
if (ret.returncode != is_valid) return ret;


+ 0
- 1
src/tagrules/check_tag_has_value.c View File

@ -17,7 +17,6 @@
ret_t check_tag_has_value(ctiff_t * ctif, tag_t tag, unsigned int value) {
tifp_check( ctif);
return check_tag_has_value_quiet( ctif, tag, value);
}


+ 2
- 2
src/tagrules/check_tag_has_value_in_range.c View File

@ -16,9 +16,9 @@
*/
ret_t check_tag_has_value_in_range(ctiff_t * ctif, tag_t tag, unsigned int a, unsigned int b) {
GET_EMPTY_RET(ret)
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
tifp_check( ctif);
ret=check_tag_quiet(ctif, tag);
if (ret.returncode != is_valid) return ret;
if (a > b) { unsigned int c=a; a=b; b=c; }


+ 2
- 2
src/tagrules/check_tag_has_value_matching_regex.c View File

@ -9,8 +9,8 @@
ret_t check_tag_has_value_matching_regex(ctiff_t * ctif, tag_t tag, const char * regex_string) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret=check_tag_quiet(ctif, tag);
if (ret.returncode != is_valid) return ret;


+ 2
- 2
src/tagrules/check_tag_has_value_quiet.c View File

@ -17,8 +17,8 @@
ret_t check_tag_has_value_quiet(ctiff_t * ctif, tag_t tag, unsigned int expected_value) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK(ctif, ret);
ret=check_tag_quiet(ctif, tag);
if (ret.returncode != is_valid) return ret;


+ 2
- 3
src/tagrules/check_tag_has_valuelist.c View File

@ -16,9 +16,8 @@
*/
ret_t check_tag_has_valuelist(ctiff_t * ctif, tag_t tag, int count, const unsigned int * values) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK( ctif, ret);
ret=check_tag_quiet(ctif, tag);
if (ret.returncode != is_valid) return ret;


+ 2
- 3
src/tagrules/check_tag_quiet.c View File

@ -13,9 +13,8 @@
/* checks if TIF has a specified tag */
ret_t check_tag_quiet(ctiff_t * ctif, tag_t tag) {
GET_EMPTY_RET(ret)
tifp_check( ctif);
GET_EMPTY_RET(ret);
TIFP_CHECK(ctif, ret);
if (-1 < TIFFGetRawTagListIndex(ctif, tag)) {
ret.returncode=is_valid;
} else {


Loading…
Cancel
Save