geissert Sat, 01 May 2010 23:32:40 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=298863
Log: Fix unaligned memory accesses in enchant (bug #51289) Bug: http://bugs.php.net/51289 (Assigned) unaligned memory access in enchant.c Changed paths: U php/php-src/branches/PHP_5_3/ext/enchant/enchant.c A php/php-src/branches/PHP_5_3/ext/enchant/tests/dict_quick_check.phpt U php/php-src/trunk/ext/enchant/enchant.c A php/php-src/trunk/ext/enchant/tests/dict_quick_check.phpt Modified: php/php-src/branches/PHP_5_3/ext/enchant/enchant.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/enchant/enchant.c 2010-05-01 23:31:14 UTC (rev 298862) +++ php/php-src/branches/PHP_5_3/ext/enchant/enchant.c 2010-05-01 23:32:40 UTC (rev 298863) @@ -728,6 +728,7 @@ if (enchant_dict_check(pdict->pdict, word, wordlen) > 0) { int n_sugg; + size_t n_sugg_st; char **suggs; if (!sugg && ZEND_NUM_ARGS() == 2) { @@ -736,7 +737,8 @@ array_init(sugg); - suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *) &n_sugg); + suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, n_sugg_st); + memcpy(&n_sugg, &n_sugg_st, sizeof(n_sugg)); if (suggs && n_sugg) { int i; for (i = 0; i < n_sugg; i++) { @@ -781,6 +783,7 @@ char **suggs; enchant_dict *pdict; int n_sugg; + size_t n_sugg_st; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { RETURN_FALSE; @@ -788,7 +791,8 @@ PHP_ENCHANT_GET_DICT; - suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *)&n_sugg); + suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, &n_sugg_st); + memcpy(&n_sugg, &n_sugg_st, sizeof(n_sugg)); if (suggs && n_sugg) { int i; Added: php/php-src/branches/PHP_5_3/ext/enchant/tests/dict_quick_check.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/enchant/tests/dict_quick_check.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/enchant/tests/dict_quick_check.phpt 2010-05-01 23:32:40 UTC (rev 298863) @@ -0,0 +1,26 @@ +--TEST-- +enchant_dict_quick_check() basic test +--SKIPIF-- +<?php +if(!extension_loaded('enchant')) die('skip, enchant not loader'); + +$tag = 'en_US'; +$r = enchant_broker_init(); +if (!enchant_broker_dict_exists($r, $tag)) + die('skip, no dictionary for ' . $tag . ' tag'); +?> +--FILE-- +<?php + +$tag = 'en_US'; +$r = enchant_broker_init(); + +$d = enchant_broker_request_dict($r, $tag); +enchant_dict_quick_check($d, 'soong', $suggs); + +echo "Elements: " . count($suggs) . "\n"; +echo "Done\n"; +?> +--EXPECTF-- +Elements: %d +Done Modified: php/php-src/trunk/ext/enchant/enchant.c =================================================================== --- php/php-src/trunk/ext/enchant/enchant.c 2010-05-01 23:31:14 UTC (rev 298862) +++ php/php-src/trunk/ext/enchant/enchant.c 2010-05-01 23:32:40 UTC (rev 298863) @@ -728,6 +728,7 @@ if (enchant_dict_check(pdict->pdict, word, wordlen) > 0) { int n_sugg; + size_t n_sugg_st; char **suggs; if (!sugg && ZEND_NUM_ARGS() == 2) { @@ -736,7 +737,8 @@ array_init(sugg); - suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *) &n_sugg); + suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, n_sugg_st); + memcpy(&n_sugg, &n_sugg_st, sizeof(n_sugg)); if (suggs && n_sugg) { int i; for (i = 0; i < n_sugg; i++) { @@ -781,6 +783,7 @@ char **suggs; enchant_dict *pdict; int n_sugg; + size_t n_sugg_st; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { RETURN_FALSE; @@ -788,7 +791,8 @@ PHP_ENCHANT_GET_DICT; - suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *)&n_sugg); + suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, &n_sugg_st); + memcpy(&n_sugg, &n_sugg_st, sizeof(n_sugg)); if (suggs && n_sugg) { int i; Added: php/php-src/trunk/ext/enchant/tests/dict_quick_check.phpt =================================================================== --- php/php-src/trunk/ext/enchant/tests/dict_quick_check.phpt (rev 0) +++ php/php-src/trunk/ext/enchant/tests/dict_quick_check.phpt 2010-05-01 23:32:40 UTC (rev 298863) @@ -0,0 +1,26 @@ +--TEST-- +enchant_dict_quick_check() basic test +--SKIPIF-- +<?php +if(!extension_loaded('enchant')) die('skip, enchant not loader'); + +$tag = 'en_US'; +$r = enchant_broker_init(); +if (!enchant_broker_dict_exists($r, $tag)) + die('skip, no dictionary for ' . $tag . ' tag'); +?> +--FILE-- +<?php + +$tag = 'en_US'; +$r = enchant_broker_init(); + +$d = enchant_broker_request_dict($r, $tag); +enchant_dict_quick_check($d, 'soong', $suggs); + +echo "Elements: " . count($suggs) . "\n"; +echo "Done\n"; +?> +--EXPECTF-- +Elements: %d +Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php