Esempio n. 1
0
/* {{{ SAPI_POST_READER_FUNC
 */
SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
{
	char *data;
	int length;

	/* $HTTP_RAW_POST_DATA registration */
	if (!strcmp(SG(request_info).request_method, "POST")) {
		if (NULL == SG(request_info).post_entry) {
			/* no post handler registered, so we just swallow the data */
			sapi_read_standard_form_data(TSRMLS_C);
		}

		/* For unknown content types we create HTTP_RAW_POST_DATA even if always_populate_raw_post_data off,
		 * this is in-effecient, but we need to keep doing it for BC reasons (for now) */
		if ((PG(always_populate_raw_post_data) || NULL == SG(request_info).post_entry) && SG(request_info).post_data) {
			length = SG(request_info).post_data_length;
			data = estrndup(SG(request_info).post_data, length);
			SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, length);
		}
	}

	/* for php://input stream:
	 some post handlers modify the content of request_info.post_data
	 so for now we need a copy for the php://input stream
	 in the long run post handlers should be changed to not touch
	 request_info.post_data for memory preservation reasons
	*/
	if (SG(request_info).post_data) {
		SG(request_info).raw_post_data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
		SG(request_info).raw_post_data_length = SG(request_info).post_data_length;
	}
}
Esempio n. 2
0
int ora_set_param_values(oraCursor *cursor, int isout)
{
	char *paramname;
	oraParam *param;
#if PHP_API_VERSION < 19990421
	pval *pdata;
#else
	pval **pdata;
#endif
	int i, len, plen;
#if (WIN32|WINNT)
	/* see variables.c */
	HashTable *symbol_table=php3i_get_symbol_table();
#endif
	_php3_hash_internal_pointer_reset(cursor->params);

	if(_php3_hash_num_elements(cursor->params) != cursor->nparams){
		php3_error(E_WARNING, "Mismatch in number of parameters");
		return 0;
	}

	for(i = 0; i < cursor->nparams; i++, _php3_hash_move_forward(cursor->params)){
		if(_php3_hash_get_current_key(cursor->params, &paramname, NULL) != HASH_KEY_IS_STRING){
			php3_error(E_WARNING, "Can't get parameter name");
			return 0;
		}

		if(_php3_hash_get_current_data(cursor->params, (void **)&param) == FAILURE){
			php3_error(E_WARNING, "Can't get parameter data");
			efree(paramname);
			return 0;
		}

		if(isout){
#if (WIN32|WINNT)
			/* see oracle_hack.c */
			{ 
				pval var; 
				char *name=(paramname); 
				var.value.str.val = estrdup(param->progv);
				var.value.str.len = strlen(param->progv);
				var.type = IS_STRING; 
				_php3_hash_update(symbol_table, name, strlen(name)+1, &var, sizeof(pval),NULL); 
			} 
#else
			SET_VAR_STRINGL(paramname, estrdup(param->progv), strlen(param->progv));
#endif
			efree(paramname);
			continue;
		}
		
		/* doing the in-loop */

		/* FIXME Globals don't work in extensions on windows, have to do something
			else here.  See oracle_hack.c */
#if (WIN32|WINNT)
		if(_php3_hash_find(symbol_table, paramname, strlen(paramname) + 1, (void **)&pdata) == FAILURE){
			php3_error(E_WARNING, "Can't find variable for parameter");
			efree(paramname);
			return 0;
		}
#else

#if PHP_API_VERSION < 19990421 
		if(_php3_hash_find(&GLOBAL(symbol_table), paramname, strlen(paramname) + 1, (void **)&pdata) == FAILURE){
#else
		if(_php3_hash_find(&EG(symbol_table), paramname, strlen(paramname) + 1, (void **)&pdata) == FAILURE){
#endif
			php3_error(E_WARNING, "Can't find variable for parameter");
			efree(paramname);
			return 0;
		}
#endif

#if PHP_API_VERSION < 19990421 
  		convert_to_string(pdata);
		plen = pdata->value.str.len;
#else
		convert_to_string(*pdata);
		plen = (*pdata)->value.str.len;
#endif
 		if (param->progvl <= plen){
  			php3_error(E_NOTICE, "Input value will be truncated");
  		}

		len = min(param->progvl - 1, plen);

#if PHP_API_VERSION < 19990421 
		strncpy(param->progv, pdata->value.str.val, len);
#else
		strncpy(param->progv, (*pdata)->value.str.val, len);
#endif
		param->progv[len] = '\0';

		efree(paramname);
	}

	return 1;
}