]> granicus.if.org Git - php/commitdiff
Properly fixed bug #34456 (original patch completely reverted).
authorIlia Alshanetsky <iliaa@php.net>
Mon, 17 Oct 2005 15:29:55 +0000 (15:29 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 17 Oct 2005 15:29:55 +0000 (15:29 +0000)
ext/pspell/pspell.c

index 8e9f5470a6b9b155a391c896dd3d54f8c057ee6f..b3376329631cae35ee4604dc083cd8cbc7a57592 100644 (file)
@@ -101,6 +101,22 @@ static void php_pspell_close_config(zend_rsrc_list_entry *rsrc TSRMLS_DC)
        delete_pspell_config(config);
 }
 
+#define PSPELL_FETCH_CONFIG \
+       convert_to_long_ex(conf);       \
+       config = (PspellConfig *) zend_list_find(Z_LVAL_PP(conf), &type);       \
+       if (config == NULL || type != le_pspell_config) {       \
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(conf));       \
+               RETURN_FALSE;   \
+       }       \
+
+#define PSPELL_FETCH_MANAGER \
+       convert_to_long_ex(scin);       \
+       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);     \
+       if (!manager || type != le_pspell) {    \
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));       \
+               RETURN_FALSE;   \
+       }       \
+
 /* {{{ PHP_MINIT_FUNCTION
  */
 PHP_MINIT_FUNCTION(pspell)
@@ -352,13 +368,7 @@ PHP_FUNCTION(pspell_new_config)
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(conf);
-       config = (PspellConfig *) zend_list_find(Z_LVAL_PP(conf), &type);
-       
-       if (config == NULL || type != le_pspell_config) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(conf));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;
 
        ret = new_pspell_manager(config);
 
@@ -387,13 +397,9 @@ PHP_FUNCTION(pspell_check)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
        convert_to_string_ex(word);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-               RETURN_FALSE;
-       }
+
+       PSPELL_FETCH_MANAGER;
 
        if(pspell_manager_check(manager, Z_STRVAL_PP(word))){
                RETURN_TRUE;
@@ -419,13 +425,8 @@ PHP_FUNCTION(pspell_suggest)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
        convert_to_string_ex(word);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-       RETURN_FALSE;
-       }
+       PSPELL_FETCH_MANAGER;
 
        array_init(return_value);
 
@@ -457,14 +458,9 @@ PHP_FUNCTION(pspell_store_replacement)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
        convert_to_string_ex(miss);
        convert_to_string_ex(corr);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_MANAGER;
 
        pspell_manager_store_replacement(manager, Z_STRVAL_PP(miss), Z_STRVAL_PP(corr));
        if(pspell_manager_error_number(manager) == 0){
@@ -490,13 +486,8 @@ PHP_FUNCTION(pspell_add_to_personal)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
        convert_to_string_ex(word);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_MANAGER;
 
        /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/
        if(Z_STRLEN_PP(word) == 0){
@@ -527,13 +518,8 @@ PHP_FUNCTION(pspell_add_to_session)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
        convert_to_string_ex(word);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_MANAGER;
 
        /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/
        if(Z_STRLEN_PP(word) == 0){
@@ -564,12 +550,7 @@ PHP_FUNCTION(pspell_clear_session)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_MANAGER;   
 
        pspell_manager_clear_session(manager);
        if(pspell_manager_error_number(manager) == 0){
@@ -595,12 +576,7 @@ PHP_FUNCTION(pspell_save_wordlist)
                WRONG_PARAM_COUNT;
        }
     
-       convert_to_long_ex(scin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(scin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL result index", Z_LVAL_PP(scin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_MANAGER;   
 
        pspell_manager_save_all_word_lists(manager);
 
@@ -694,25 +670,18 @@ PHP_FUNCTION(pspell_config_create)
 PHP_FUNCTION(pspell_config_runtogether)
 {
        int type;
-       zval **sccin, **runtogether;
+       zval **conf, **runtogether;
        int argc;
 
-       PspellManager *manager;
        PspellConfig *config;
        
        argc = ZEND_NUM_ARGS();
-       if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&runtogether) == FAILURE) {
+       if (argc != 2 || zend_get_parameters_ex(argc,&conf,&runtogether) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(sccin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(sccin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;    
 
-       config = pspell_manager_config(manager);
        convert_to_boolean_ex(runtogether);
        pspell_config_replace(config, "run-together", Z_LVAL_PP(runtogether) ? "true" : "false");
        
@@ -725,25 +694,18 @@ PHP_FUNCTION(pspell_config_runtogether)
 PHP_FUNCTION(pspell_config_mode)
 {
        int type;
-       zval **sccin, **mode;
+       zval **conf, **mode;
        int argc;
 
-       PspellManager *manager;
        PspellConfig *config;
        
        argc = ZEND_NUM_ARGS();
-       if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&mode) == FAILURE) {
+       if (argc != 2 || zend_get_parameters_ex(argc,&conf,&mode) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(sccin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(sccin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;
 
-       config = pspell_manager_config(manager);
        convert_to_long_ex(mode);
 
        /* First check what mode we want (how many suggestions) */
@@ -764,29 +726,22 @@ PHP_FUNCTION(pspell_config_mode)
 PHP_FUNCTION(pspell_config_ignore)
 {
        int type;
-       zval **sccin, **pignore;
+       zval **conf, **pignore;
        int argc;
 
        int loc = PSPELL_LARGEST_WORD;
        char ignore_str[PSPELL_LARGEST_WORD + 1];       
        long ignore = 0L;
 
-       PspellManager *manager;
        PspellConfig *config;
        
        argc = ZEND_NUM_ARGS();
-       if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&pignore) == FAILURE) {
+       if (argc != 2 || zend_get_parameters_ex(argc,&conf,&pignore) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(sccin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(sccin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;
 
-       config = pspell_manager_config(manager);
        convert_to_long_ex(pignore);
        ignore = Z_LVAL_PP(pignore);
 
@@ -814,24 +769,17 @@ PHP_FUNCTION(pspell_config_ignore)
 static void pspell_config_path(INTERNAL_FUNCTION_PARAMETERS, char *option)
 {
        int type;
-       zval **sccin, **value;
+       zval **conf, **value;
        int argc;
-       PspellManager *manager;
        PspellConfig *config;
        
        argc = ZEND_NUM_ARGS();
-       if (argc != 2 || zend_get_parameters_ex(argc, &sccin, &value) == FAILURE) {
+       if (argc != 2 || zend_get_parameters_ex(argc, &conf, &value) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(sccin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(sccin), &type);
-       if (!manager) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;
 
-       config = pspell_manager_config(manager);
        convert_to_string_ex(value);
 
        if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(value), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
@@ -876,25 +824,18 @@ PHP_FUNCTION(pspell_config_data_dir)
 PHP_FUNCTION(pspell_config_repl)
 {
        int type;
-       zval **sccin, **repl;
+       zval **conf, **repl;
        int argc;
 
-       PspellManager *manager;
        PspellConfig *config;
        
        argc = ZEND_NUM_ARGS();
-       if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&repl) == FAILURE) {
+       if (argc != 2 || zend_get_parameters_ex(argc,&conf,&repl) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(sccin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(sccin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;
 
-       config = pspell_manager_config(manager);
        pspell_config_replace(config, "save-repl", "true");
 
        convert_to_string_ex(repl);
@@ -918,25 +859,18 @@ PHP_FUNCTION(pspell_config_repl)
 PHP_FUNCTION(pspell_config_save_repl)
 {
        int type;
-       zval **sccin, **save;
+       zval **conf, **save;
        int argc;
 
-       PspellManager *manager;
        PspellConfig *config;
        
        argc = ZEND_NUM_ARGS();
-       if (argc != 2 || zend_get_parameters_ex(argc,&sccin,&save) == FAILURE) {
+       if (argc != 2 || zend_get_parameters_ex(argc,&conf,&save) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(sccin);
-       manager = (PspellManager *) zend_list_find(Z_LVAL_PP(sccin), &type);
-       if(!manager){
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%ld is not a PSPELL config index", Z_LVAL_PP(sccin));
-               RETURN_FALSE;
-       }
+       PSPELL_FETCH_CONFIG;
 
-       config = pspell_manager_config(manager);
        convert_to_boolean_ex(save);
        pspell_config_replace(config, "save-repl", Z_LVAL_PP(save) ? "true" : "false");