fix segv's, zend_parse_parameters seems not to be able to handle

resources.

# emacs is cool
This commit is contained in:
Sterling Hughes 2001-10-12 15:07:05 +00:00
parent 0cee8df65e
commit ce6dde342b

View file

@ -147,10 +147,9 @@ PHP_FUNCTION(zip_read)
php_zzip_dirent *entry = NULL;
int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_dp) == FAILURE) {
return;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zzip_dp) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(archive_p, ZZIP_DIR *, zzip_dp, -1, le_zip_dir_name, le_zip_dir);
entry = emalloc(sizeof(php_zzip_dirent));
@ -172,8 +171,8 @@ PHP_FUNCTION(zip_close)
zval **zzip_dp;
ZZIP_DIR *archive_p = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_dp) == FAILURE) {
return;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zzip_dp) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(archive_p, ZZIP_DIR *, zzip_dp, -1, le_zip_dir_name, le_zip_dir);
@ -189,10 +188,9 @@ static void php_zzip_get_entry(INTERNAL_FUNCTION_PARAMETERS, int opt)
zval **zzip_ent;
php_zzip_dirent *entry = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_ent) == FAILURE) {
return;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zzip_ent) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, zzip_ent, -1, le_zip_entry_name, le_zip_entry);
switch (opt) {
@ -244,44 +242,51 @@ PHP_FUNCTION(zip_entry_compressionmethod)
}
/* }}} */
/* {{{ proto bool zip_entry_open(resource zip_dp, resource zip_entry, string mode)
/* {{{ proto bool zip_entry_open(resource zip_dp, resource zip_entry[, string mode])
Open a Zip File, pointed by the resource entry */
PHP_FUNCTION(zip_entry_open)
{
zval **zzip_dp;
zval **zzip_ent;
zval **z_mode;
ZZIP_DIR *archive_p = NULL;
php_zzip_dirent *entry = NULL;
int mode;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr|l", &zzip_dp, &zzip_ent, &mode) == FAILURE)
return;
int argc = ZEND_NUM_ARGS();
if (argc < 2 || argc > 3 ||
zend_get_parameters_ex(argc, &zzip_dp, &zzip_ent, &mode) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(archive_p, ZZIP_DIR *, zzip_dp, -1, le_zip_dir_name, le_zip_dir);
ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, zzip_ent, -1, le_zip_entry_name, le_zip_entry);
entry->fp = zzip_file_open(archive_p, entry->dirent.d_name, O_RDONLY | O_BINARY);
RETURN_BOOL(entry->fp);
}
/* }}} */
/* {{{ proto string zip_read(resource zip_ent)
/* {{{ proto string zip_read(resource zip_ent[, int len])
Read X bytes from an opened zip entry */
PHP_FUNCTION(zip_entry_read)
{
zval **zzip_ent;
zval **z_len;
php_zzip_dirent *entry = NULL;
char *buf = NULL;
int len = 1024;
int ret = 0;
int argc = ZEND_NUM_ARGS();
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &zzip_ent, &len) == FAILURE) {
return;
if (argc < 1 || argc > 2 ||
zend_get_parameters_ex(argc, &zzip_ent, &z_len) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, zzip_ent, -1, le_zip_entry_name, le_zip_entry);
if (argc > 1) {
len = Z_LVAL_PP(z_len);
}
buf = emalloc(len + 1);
ret = zzip_read(entry->fp, buf, len);
if (ret == 0) {
@ -299,10 +304,10 @@ PHP_FUNCTION(zip_entry_close)
zval **zzip_ent;
php_zzip_dirent *entry = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zzip_ent) == FAILURE) {
return;
if (ZEND_NUM_ARGS() != 1 ||
zend_get_parameters_ex(1, &zzip_ent) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, zzip_ent, -1, le_zip_entry_name, le_zip_entry);
zend_list_delete(Z_LVAL_PP(zzip_ent));