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