Mercurial > libavcodec.hg
comparison bmp.c @ 8204:507854688c43 libavcodec
Some BMP files have file size declared in the header equal to headers size
without image data, so try to correct that value before conducting checks on
declared file size.
author | kostya |
---|---|
date | Mon, 24 Nov 2008 11:24:02 +0000 |
parents | 3b90f93d97a6 |
children | 052c676c433b |
comparison
equal
deleted
inserted
replaced
8203:3b90f93d97a6 | 8204:507854688c43 |
---|---|
71 | 71 |
72 buf += 2; /* reserved1 */ | 72 buf += 2; /* reserved1 */ |
73 buf += 2; /* reserved2 */ | 73 buf += 2; /* reserved2 */ |
74 | 74 |
75 hsize = bytestream_get_le32(&buf); /* header size */ | 75 hsize = bytestream_get_le32(&buf); /* header size */ |
76 ihsize = bytestream_get_le32(&buf); /* more header size */ | |
77 if(ihsize + 14 > hsize){ | |
78 av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize); | |
79 return -1; | |
80 } | |
81 | |
82 /* sometimes file size is set to some headers size, set a real size in that case */ | |
83 if(fsize == 14 || fsize == ihsize + 14) | |
84 fsize = buf_size - 2; | |
85 | |
76 if(fsize <= hsize){ | 86 if(fsize <= hsize){ |
77 av_log(avctx, AV_LOG_ERROR, "declared file size is less than header size (%d < %d)\n", | 87 av_log(avctx, AV_LOG_ERROR, "declared file size is less than header size (%d < %d)\n", |
78 fsize, hsize); | 88 fsize, hsize); |
79 return -1; | |
80 } | |
81 | |
82 ihsize = bytestream_get_le32(&buf); /* more header size */ | |
83 if(ihsize + 14 > hsize){ | |
84 av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize); | |
85 return -1; | 89 return -1; |
86 } | 90 } |
87 | 91 |
88 switch(ihsize){ | 92 switch(ihsize){ |
89 case 40: // windib v3 | 93 case 40: // windib v3 |