]> git.pld-linux.org Git - packages/php.git/blob - php-bug-40073.patch
- up to 1.173.2.5.2.10
[packages/php.git] / php-bug-40073.patch
1 --- exif.c      2006/10/10 22:22:43     1.173.2.5.2.4
2 +++ exif.c      2007/01/09 17:55:29     1.173.2.5.2.10
3 @@ -2,7 +2,7 @@
4     +----------------------------------------------------------------------+
5     | PHP Version 5                                                        |
6     +----------------------------------------------------------------------+
7 -   | Copyright (c) 1997-2006 The PHP Group                                |
8 +   | Copyright (c) 1997-2007 The PHP Group                                |
9     +----------------------------------------------------------------------+
10     | This source file is subject to version 3.01 of the PHP license,      |
11     | that is bundled with this package in the file LICENSE, and is        |
12 @@ -17,7 +17,7 @@
13     +----------------------------------------------------------------------+
14   */
15  
16 -/* $Id$ */
17 +/* $Id$ */
18  
19  /*  ToDos
20   *
21 @@ -139,7 +139,7 @@
22  };
23  /* }}} */
24  
25 -#define EXIF_VERSION "1.4 $Id$"
26 +#define EXIF_VERSION "1.4 $Id$"
27  
28  /* {{{ PHP_MINFO_FUNCTION
29   */
30 @@ -1150,6 +1150,80 @@
31  }
32  /* }}} */
33  
34 +#ifdef EXIF_DEBUG
35 +char * exif_dump_data(int *dump_free, int format, int components, int length, int motorola_intel, char *value_ptr TSRMLS_DC) /* {{{ */
36 +{
37 +       char *dump;
38 +       int len;
39 +
40 +       *dump_free = 0;
41 +       if (format == TAG_FMT_STRING) {
42 +               return value_ptr ? value_ptr : "<no data>";
43 +       }
44 +       if (format == TAG_FMT_UNDEFINED) {
45 +               return "<undefined>\n";
46 +       }
47 +       if (format == TAG_FMT_IFD) {
48 +               return "";
49 +       }
50 +       if (format == TAG_FMT_SINGLE || format == TAG_FMT_DOUBLE) {
51 +               return "<not implemented>";
52 +       }
53 +       *dump_free = 1;
54 +       if (components > 1) {
55 +               len = spprintf(&dump, 0, "(%d,%d) {", components, length);
56 +       } else {
57 +               len = spprintf(&dump, 0, "{");
58 +       }
59 +       while(components > 0) {
60 +               switch(format) {
61 +                       case TAG_FMT_BYTE:
62 +                       case TAG_FMT_UNDEFINED:
63 +                       case TAG_FMT_STRING:
64 +                       case TAG_FMT_SBYTE:
65 +                               dump = erealloc(dump, len + 4);
66 +                               sprintf(dump + len, "0x%02X", *value_ptr);
67 +                               len += 4;
68 +                               value_ptr++;
69 +                               break;
70 +                       case TAG_FMT_USHORT:
71 +                       case TAG_FMT_SSHORT:
72 +                               dump = erealloc(dump, len + 6);
73 +                               sprintf(dump + len, "0x%04X", php_ifd_get16s(value_ptr, motorola_intel));
74 +                               len += 6;
75 +                               value_ptr += 2;
76 +                               break;
77 +                       case TAG_FMT_ULONG:
78 +                       case TAG_FMT_SLONG:
79 +                               dump = erealloc(dump, len + 6);
80 +                               sprintf(dump + len, "0x%04X", php_ifd_get32s(value_ptr, motorola_intel));
81 +                               len += 6;
82 +                               value_ptr += 4;
83 +                               break;
84 +                       case TAG_FMT_URATIONAL:
85 +                       case TAG_FMT_SRATIONAL:
86 +                               dump = erealloc(dump, len + 13);
87 +                               sprintf(dump + len, "0x%04X/0x%04X", php_ifd_get32s(value_ptr, motorola_intel), php_ifd_get32s(value_ptr+4, motorola_intel));
88 +                               len += 13;
89 +                               value_ptr += 8;
90 +                               break;
91 +               }
92 +               if (components > 0) {
93 +                       dump = erealloc(dump, len + 2);
94 +                       sprintf(dump + len, ", ");
95 +                       len += 2;                       
96 +                       components--;
97 +               } else{
98 +                       break;
99 +               }
100 +       }
101 +       dump = erealloc(dump, len + 2);
102 +       sprintf(dump + len, "}");
103 +       return dump;
104 +}
105 +/* }}} */
106 +#endif
107 +
108  /* {{{ exif_convert_any_format
109   * Evaluate number, be it int, rational, or float from directory. */
110  static double exif_convert_any_format(void *value, int format, int motorola_intel TSRMLS_DC)
111 @@ -1599,6 +1673,7 @@
112         image_info->info_list[section_index].list = list;
113  
114         info_data  = &image_info->info_list[section_index].list[image_info->info_list[section_index].count];
115 +       memset(info_data, 0, sizeof(image_info_data));
116         info_data->tag    = tag;
117         info_data->format = format;
118         info_data->length = length;
119 @@ -2746,10 +2821,14 @@
120         char *value_ptr, tagname[64], cbuf[32], *outside=NULL;
121         size_t byte_count, offset_val, fpos, fgot;
122         xp_field_type *tmp_xp;
123 +#ifdef EXIF_DEBUG
124 +       char *dump_data;
125 +       int dump_free;
126 +#endif /* EXIF_DEBUG */
127  
128         /* Protect against corrupt headers */
129         if (ImageInfo->ifd_nesting_level > MAX_IFD_NESTING_LEVEL) {
130 -               exif_error_docref("exif_read_data#error_ifd" TSRMLS_CC, ImageInfo, E_WARNING, "corrupt EXIF header: maximum directory nesting level reached");
131 +               exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "corrupt EXIF header: maximum directory nesting level reached");
132                 return FALSE;
133         }
134         ImageInfo->ifd_nesting_level++;
135 @@ -2834,7 +2913,11 @@
136  
137         ImageInfo->sections_found |= FOUND_ANY_TAG;
138  #ifdef EXIF_DEBUG
139 -       exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val+displacement, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", format==TAG_FMT_STRING?(value_ptr?value_ptr:"<no data>"):exif_get_tagformat(format));
140 +       dump_data = exif_dump_data(&dump_free, format, components, length, ImageInfo->motorola_intel, value_ptr TSRMLS_CC);
141 +       exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s %s", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val+displacement, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(format), dump_data);
142 +       if (dump_free) {
143 +               efree(dump_data);
144 +       }
145  #endif
146         if (section_index==SECTION_THUMBNAIL) {
147                 if (!ImageInfo->Thumbnail.data) {
148 @@ -3023,7 +3106,9 @@
149                                                 exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD Pointer");
150                                                 return FALSE;
151                                         }
152 -                                       exif_process_IFD_in_JPEG(ImageInfo, Subdir_start, offset_base, IFDlength, displacement, sub_section_index TSRMLS_CC);
153 +                                       if (!exif_process_IFD_in_JPEG(ImageInfo, Subdir_start, offset_base, IFDlength, displacement, sub_section_index TSRMLS_CC)) {
154 +                                               return FALSE;
155 +                                       }
156  #ifdef EXIF_DEBUG
157                                         exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Subsection %s done", exif_get_sectionname(sub_section_index));
158  #endif
159 @@ -3590,7 +3675,7 @@
160                                                                 exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "%s THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.data ? "Ignore" : "Read", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
161  #endif
162                                                                 if (!ImageInfo->Thumbnail.data) {
163 -                                                                       ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size);
164 +                                                                       ImageInfo->Thumbnail.data = safe_emalloc(ImageInfo->Thumbnail.size, 1, 0);
165                                                                         php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET);
166                                                                         fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
167                                                                         if (fgot < ImageInfo->Thumbnail.size) {
168 @@ -3623,7 +3708,7 @@
169                                         exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "%s THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.data ? "Ignore" : "Read", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size);
170  #endif
171                                         if (!ImageInfo->Thumbnail.data && ImageInfo->Thumbnail.offset && ImageInfo->Thumbnail.size && ImageInfo->read_thumbnail) {
172 -                                               ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size);
173 +                                               ImageInfo->Thumbnail.data = safe_emalloc(ImageInfo->Thumbnail.size, 1, 0);
174                                                 php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET);
175                                                 fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size);
176                                                 if (fgot < ImageInfo->Thumbnail.size) {
177 @@ -3914,7 +3999,7 @@
178                 exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "ByteOrderMotorola", ImageInfo.motorola_intel TSRMLS_CC);
179         }
180         if (ImageInfo.FocalLength) {
181 -               exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocalLength" TSRMLS_CC, "%4.1fmm", ImageInfo.FocalLength);
182 +               exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocalLength" TSRMLS_CC, "%4.1Fmm", ImageInfo.FocalLength);
183                 if(ImageInfo.CCDWidth) {
184                         exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "35mmFocalLength" TSRMLS_CC, "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5));
185                 }
186 @@ -3924,19 +4009,19 @@
187         }
188         if(ImageInfo.ExposureTime>0) {
189                 if(ImageInfo.ExposureTime <= 0.5) {
190 -                       exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3f s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime));
191 +                       exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3F s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime));
192                 } else {
193 -                       exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3f s", ImageInfo.ExposureTime);
194 +                       exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3F s", ImageInfo.ExposureTime);
195                 }
196         }
197         if(ImageInfo.ApertureFNumber) {
198 -               exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ApertureFNumber" TSRMLS_CC, "f/%.1f", ImageInfo.ApertureFNumber);
199 +               exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ApertureFNumber" TSRMLS_CC, "f/%.1F", ImageInfo.ApertureFNumber);
200         }
201         if(ImageInfo.Distance) {
202                 if(ImageInfo.Distance<0) {
203                         exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "FocusDistance", "Infinite" TSRMLS_CC);
204                 } else {
205 -                       exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocusDistance" TSRMLS_CC, "%0.2fm", ImageInfo.Distance);
206 +                       exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocusDistance" TSRMLS_CC, "%0.2Fm", ImageInfo.Distance);
207                 }
208         }
209         if (ImageInfo.UserComment) {
210 @@ -4005,7 +4090,7 @@
211     Reads the embedded thumbnail */
212  PHP_FUNCTION(exif_thumbnail)
213  {
214 -       zval *p_width, *p_height, *p_imagetype;
215 +       zval *p_width = 0, *p_height = 0, *p_imagetype = 0;
216         char *p_name;
217         int p_name_len, ret, arg_c = ZEND_NUM_ARGS();
218         image_info_type ImageInfo;
This page took 0.049491 seconds and 3 git commands to generate.