@@ -1541,6 +1541,20 @@ static void php_ifd_set32u(char *data, size_t value, int motorola_intel)
1541
1541
}
1542
1542
/* }}} */
1543
1543
1544
+ static float php_ifd_get_float (char * data ) {
1545
+ /* Copy to avoid alignment issues */
1546
+ float f ;
1547
+ memcpy (& f , data , sizeof (float ));
1548
+ return f ;
1549
+ }
1550
+
1551
+ static double php_ifd_get_double (char * data ) {
1552
+ /* Copy to avoid alignment issues */
1553
+ double f ;
1554
+ memcpy (& f , data , sizeof (double ));
1555
+ return f ;
1556
+ }
1557
+
1544
1558
#ifdef EXIF_DEBUG
1545
1559
char * exif_dump_data (int * dump_free , int format , int components , int length , int motorola_intel , char * value_ptr ) /* {{{ */
1546
1560
{
@@ -1653,12 +1667,12 @@ static double exif_convert_any_format(void *value, int format, int motorola_inte
1653
1667
#ifdef EXIF_DEBUG
1654
1668
php_error_docref (NULL , E_NOTICE , "Found value of type single" );
1655
1669
#endif
1656
- return (double )* ( float * ) value ;
1670
+ return (double ) php_ifd_get_float ( value ) ;
1657
1671
case TAG_FMT_DOUBLE :
1658
1672
#ifdef EXIF_DEBUG
1659
1673
php_error_docref (NULL , E_NOTICE , "Found value of type double" );
1660
1674
#endif
1661
- return * ( double * ) value ;
1675
+ return php_ifd_get_double ( value ) ;
1662
1676
}
1663
1677
return 0 ;
1664
1678
}
@@ -1716,12 +1730,12 @@ static size_t exif_convert_any_to_int(void *value, int format, int motorola_inte
1716
1730
#ifdef EXIF_DEBUG
1717
1731
php_error_docref (NULL , E_NOTICE , "Found value of type single" );
1718
1732
#endif
1719
- return (size_t )* ( float * ) value ;
1733
+ return (size_t ) php_ifd_get_float ( value ) ;
1720
1734
case TAG_FMT_DOUBLE :
1721
1735
#ifdef EXIF_DEBUG
1722
1736
php_error_docref (NULL , E_NOTICE , "Found value of type double" );
1723
1737
#endif
1724
- return (size_t )* ( double * ) value ;
1738
+ return (size_t ) php_ifd_get_double ( value ) ;
1725
1739
}
1726
1740
return 0 ;
1727
1741
}
@@ -2188,13 +2202,13 @@ static void exif_iif_add_value(image_info_type *image_info, int section_index, c
2188
2202
#ifdef EXIF_DEBUG
2189
2203
php_error_docref (NULL , E_WARNING , "Found value of type single" );
2190
2204
#endif
2191
- info_value -> f = * ( float * ) value ;
2205
+ info_value -> f = php_ifd_get_float ( value ) ;
2192
2206
break ;
2193
2207
case TAG_FMT_DOUBLE :
2194
2208
#ifdef EXIF_DEBUG
2195
2209
php_error_docref (NULL , E_WARNING , "Found value of type double" );
2196
2210
#endif
2197
- info_value -> d = * ( double * ) value ;
2211
+ info_value -> d = php_ifd_get_double ( value ) ;
2198
2212
break ;
2199
2213
}
2200
2214
}
0 commit comments