diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2021-11-19 00:39:39 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2021-11-19 00:39:39 +0000 |
commit | 055bdcea05ec69ce144e95cb4275c9c168f5ee50 (patch) | |
tree | caa9b40699f635c6927cd2263bc10f7f1dacf143 /converter/pbm/mgrtopbm.c | |
parent | 1f028a3d66db42414e29bb3c86b690f290e2af85 (diff) | |
download | netpbm-mirror-055bdcea05ec69ce144e95cb4275c9c168f5ee50.tar.gz netpbm-mirror-055bdcea05ec69ce144e95cb4275c9c168f5ee50.tar.xz netpbm-mirror-055bdcea05ec69ce144e95cb4275c9c168f5ee50.zip |
Release 10.86.26
git-svn-id: http://svn.code.sf.net/p/netpbm/code/stable@4180 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/pbm/mgrtopbm.c')
-rw-r--r-- | converter/pbm/mgrtopbm.c | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/converter/pbm/mgrtopbm.c b/converter/pbm/mgrtopbm.c index 9f7004a1..712e3be9 100644 --- a/converter/pbm/mgrtopbm.c +++ b/converter/pbm/mgrtopbm.c @@ -16,6 +16,48 @@ static void +interpHdrWidth(struct b_header const head, + unsigned int * const colsP) { + + if (head.h_wide < ' ' || head.l_wide < ' ') + pm_error("Invalid width field in MGR header"); + else { + unsigned int const maxDimension = 4095; + + unsigned int const cols = + (((int)head.h_wide - ' ') << 6) + ((int)head.l_wide - ' '); + + if (cols == 0 || cols > maxDimension) + pm_error("Invalid width value (%u) in MGR header", cols); + else + *colsP = cols; + } +} + + + +static void +interpHdrHeight(struct b_header const head, + unsigned int * const rowsP) { + + if (head.h_high < ' ' || head.l_high < ' ') + pm_error("Invalid height field in MGR header"); + else { + unsigned int const maxDimension = 4095; + + unsigned int const rows = + (((int)head.h_high - ' ') << 6) + ((int)head.l_high - ' '); + + if (rows == 0 || rows > maxDimension) + pm_error("Invalid height value (%u) in MGR header", rows); + else + *rowsP = rows; + } +} + + + +static void readMgrHeader(FILE * const ifP, unsigned int * const colsP, unsigned int * const rowsP, @@ -60,13 +102,9 @@ readMgrHeader(FILE * const ifP, pad = 0; /* should never reach here */ } - if (head.h_wide < ' ' || head.l_wide < ' ') - pm_error("Invalid width field in MGR header"); - if (head.h_high < ' ' || head.l_high < ' ') - pm_error("Invalid width field in MGR header"); + interpHdrWidth (head, colsP); + interpHdrHeight(head, rowsP); - *colsP = (((int)head.h_wide - ' ') << 6) + ((int)head.l_wide - ' '); - *rowsP = (((int)head.h_high - ' ') << 6) + ((int) head.l_high - ' '); *padrightP = ( ( *colsP + pad - 1 ) / pad ) * pad - *colsP; } |