ZF-7279: Zend_Locale_Format::_parseDate fails when iconv internal encoding is not UTF-8
Description
Zend_Locale_Format::_parseDate assumes that iconv internal encoding is UTF-8 and performs operations against UTF-8 data from Zend_Locale. If the internal character encoding is something other than UTF-8, it fails.
The below patch fixes the failure, but isn't entirely complete; the function will still fail some of the iconv operations if $date is not a valid UTF-8 string. It should be converted to UTF-8 at the beginning of the function, but I don't have an idea on how best to accomplish this.
Patch:
--- Format.php (revision 16719)
+++ Format.php (working copy)
@@ -665,6 +667,9 @@
$number = $date; // working copy
$result['date_format'] = $format; // save the format used to normalize $number (convenience)
$result['locale'] = $options['locale']; // save the locale used to normalize $number (convenience)
+
+ $oldEncoding = iconv_get_encoding('internal_encoding');
+ iconv_set_encoding('internal_encoding', 'UTF-8');
$day = iconv_strpos($format, 'd');
$month = iconv_strpos($format, 'M');
@@ -925,6 +930,7 @@
}
}
+ iconv_set_encoding('internal_encoding', $oldEncoding);
return $result;
}
Comments
Posted by Thomas Weidner (thomas) on 2009-08-23T12:34:34.000+0000
Fixed with r17783