Date: 04/25/99
- Next message: thies: "[PHP-DEV] CVS update: php3/functions"
- Previous message: thies: "[PHP-DEV] CVS update: php3"
- Next in thread: thies: "[PHP-DEV] CVS update: php3/functions"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sunday April 25, 1999 @ 12:26
Author: thies
Update of /repository/php3/functions
In directory php:/tmp/cvs-serv20833/functions
Modified Files:
oracle.c oracle.h
Log Message:
fixed mem-leak in ora_bind
fixed length of variables returned from ora_bind
Index: php3/functions/oracle.c
diff -u php3/functions/oracle.c:1.99 php3/functions/oracle.c:1.100
--- php3/functions/oracle.c:1.99 Thu Apr 22 14:12:44 1999
+++ php3/functions/oracle.c Sun Apr 25 12:26:41 1999
@@ -30,7 +30,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oracle.c,v 1.99 1999/04/22 18:12:44 thies Exp $ */
+/* $Id: oracle.c,v 1.100 1999/04/25 16:26:41 thies Exp $ */
#if defined(COMPILE_DL)
# if PHP_31
@@ -222,6 +222,20 @@
ORACLE_GLOBAL(php3_oracle_module).num_persistent--;
}
+static int
+pval_ora_param_destructor(oraParam *param)
+{
+ if (! param) {
+ return 0;
+ }
+
+ if (param->progv) {
+ efree(param->progv);
+ }
+ return 0;
+}
+
+
static void _close_oracur(oraCursor *cur)
{
int i;
@@ -777,18 +791,6 @@
}
/* }}} */
-static void
-pval_ora_param_destructor(oraParam *param)
-{
- if (! param) {
- return;
- }
-
- if (param->progv) {
- efree(param->progv);
- }
-}
-
/* {{{ proto int ora_bind(int cursor, string php_variable_name, string sql_parameter_name, int length [, int type])
Bind a PHP variable to an Oracle parameter */
void php3_Ora_Bind(INTERNAL_FUNCTION_PARAMETERS)
@@ -820,10 +822,7 @@
cursor->params = (HashTable *)emalloc(sizeof(HashTable));
if (!cursor->params ||
_php3_hash_init(cursor->params, 19, NULL,
-/*
(void (*)(void *))pval_ora_param_destructor, 0) == FAILURE) {
-*/
- (void (*)(void *))NULL, 0) == FAILURE) {
php3_error(E_ERROR, "Unable to initialize parameter list");
RETURN_FALSE;
}
@@ -853,9 +852,9 @@
paramptr->progvl = argv[3]->value.lval + 1;
if(argc > 4){
convert_to_long(argv[4]);
- paramptr->type = (short)argv[4]->value.lval;
+ paramptr->inout = (short)argv[4]->value.lval;
}else{
- paramptr->type = 0;
+ paramptr->inout = 0;
}
if((paramptr->progv = (text *)emalloc(paramptr->progvl)) == NULL){
@@ -865,9 +864,22 @@
/* XXX Maximum for progvl */
paramptr->alen = paramptr->progvl;
- if(obndra(&cursor->cda, argv[2]->value.str.val, -1,
- (ub1 *)paramptr->progv, paramptr->progvl, SQLT_STR,
- -1, 0, ¶mptr->alen, 0, 0, 0, 0, -1, -1)){
+
+ if (obndra(&cursor->cda,
+ argv[2]->value.str.val,
+ -1,
+ (ub1 *)paramptr->progv,
+ paramptr->progvl,
+ SQLT_STR, /* ftype */
+ -1, /* scale */
+ 0/*¶mptr->ind*/, /* ind */
+ ¶mptr->alen, /* alen */
+ 0 /*¶mptr->arcode*/,
+ 0, /* maxsize */
+ 0,
+ 0,
+ -1,
+ -1)) {
php3_error(E_WARNING, "Ora_Bind failed (%s)",
ora_error(&cursor->cda));
RETURN_FALSE;
@@ -1697,6 +1709,7 @@
php3_error(E_WARNING, "Can't get parameter name");
return 0;
}
+
if(_php3_hash_get_current_data(cursor->params, (void **)¶m) == FAILURE){
php3_error(E_WARNING, "Can't get parameter data");
efree(paramname);
@@ -1704,29 +1717,25 @@
}
if(isout){
- /* XXX param->alen + 1 ?? */
- if(param->type != 1 && param->alen > 0){
#if (WIN32|WINNT)
/* see oracle_hack.c */
- {
- pval var;
- char *name=(paramname);
- var.value.str.val = (param->progv);
- var.value.str.len = (param->alen);
- var.type = IS_STRING;
- _php3_hash_update(symbol_table, name, strlen(name)+1, &var, sizeof(pval),NULL);
- }
+ {
+ 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, param->progv, param->alen);
+ SET_VAR_STRINGL(paramname, estrdup(param->progv), strlen(param->progv));
#endif
- }
efree(paramname);
continue;
- }else if(param->type == 2){
- 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)
@@ -1748,6 +1757,7 @@
}
len = min(param->progvl - 1, pdata->value.str.len);
+
strncpy(param->progv, pdata->value.str.val, len);
param->progv[len] = '\0';
Index: php3/functions/oracle.h
diff -u php3/functions/oracle.h:1.35 php3/functions/oracle.h:1.36
--- php3/functions/oracle.h:1.35 Mon Dec 28 04:43:58 1998
+++ php3/functions/oracle.h Sun Apr 25 12:26:41 1999
@@ -1,4 +1,4 @@
-/* $Id: oracle.h,v 1.35 1998/12/28 09:43:58 sas Exp $ */
+/* $Id: oracle.h,v 1.36 1999/04/25 16:26:41 thies Exp $ */
#ifndef _PHP3_ORACLE_H
#define _PHP3_ORACLE_H
@@ -80,7 +80,7 @@
typedef struct oraParam {
text *progv;
sword progvl;
- sb2 type;
+ sb2 inout;
ub2 alen;
} oraParam;
-- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe <email protected> For help: php-dev-help <email protected>
- Next message: thies: "[PHP-DEV] CVS update: php3/functions"
- Previous message: thies: "[PHP-DEV] CVS update: php3"
- Next in thread: thies: "[PHP-DEV] CVS update: php3/functions"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

