~legolas/ubuntu/natty/php5/5.3.5

« back to all changes in this revision

Viewing changes to ext/odbc/php_odbc.c

  • Committer: Stas Verberkt
  • Date: 2011-02-01 09:27:15 UTC
  • Revision ID: legolas@legolasweb.nl-20110201092715-yq052iu2yl4i2eyg
Inserted PHP 5.3.5.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
   +----------------------------------------------------------------------+
21
21
*/
22
22
 
23
 
/* $Id: php_odbc.c 296467 2010-03-20 18:19:16Z felipe $ */
 
23
/* $Id: php_odbc.c 305507 2010-11-18 15:22:22Z pajoye $ */
24
24
 
25
25
#ifdef HAVE_CONFIG_H
26
26
#include "config.h"
1262
1262
 
1263
1263
                zend_hash_internal_pointer_reset(Z_ARRVAL_P(pv_param_arr));
1264
1264
                params = (params_t *)safe_emalloc(sizeof(params_t), result->numparams, 0);
 
1265
                for(i = 0; i < result->numparams; i++) {
 
1266
                        params[i].fp = -1;
 
1267
                }
1265
1268
                
1266
1269
                for(i = 1; i <= result->numparams; i++) {
1267
1270
                        if (zend_hash_get_current_data(Z_ARRVAL_P(pv_param_arr), (void **) &tmp) == FAILURE) {
1268
1271
                                php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error getting parameter");
1269
1272
                                SQLFreeStmt(result->stmt,SQL_RESET_PARAMS);
 
1273
                                for (i = 0; i < result->numparams; i++) {
 
1274
                                        if (params[i].fp != -1) {
 
1275
                                                close(params[i].fp);
 
1276
                                        }
 
1277
                                }
1270
1278
                                efree(params);
1271
1279
                                RETURN_FALSE;
1272
1280
                        }
1276
1284
                        if (Z_TYPE_PP(tmp) != IS_STRING) {
1277
1285
                                php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
1278
1286
                                SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
 
1287
                                for (i = 0; i < result->numparams; i++) {
 
1288
                                        if (params[i].fp != -1) {
 
1289
                                                close(params[i].fp);
 
1290
                                        }
 
1291
                                }
1279
1292
                                efree(params);
1280
1293
                                RETURN_FALSE;
1281
1294
                        }
1282
1295
                        
1283
 
                        SQLDescribeParam(result->stmt, (SQLUSMALLINT)i, &sqltype, &precision, &scale, &nullable);
 
1296
                        rc = SQLDescribeParam(result->stmt, (SQLUSMALLINT)i, &sqltype, &precision, &scale, &nullable);
1284
1297
                        params[i-1].vallen = Z_STRLEN_PP(tmp);
1285
1298
                        params[i-1].fp = -1;
 
1299
                        if (rc == SQL_ERROR) {
 
1300
                                odbc_sql_error(result->conn_ptr, result->stmt, "SQLDescribeParameter"); 
 
1301
                                SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
 
1302
                                for (i = 0; i < result->numparams; i++) {
 
1303
                                        if (params[i].fp != -1) {
 
1304
                                                close(params[i].fp);
 
1305
                                        }
 
1306
                                }
 
1307
                                efree(params);
 
1308
                                RETURN_FALSE;
 
1309
                        }
1286
1310
 
1287
1311
                        if (IS_SQL_BINARY(sqltype)) {
1288
1312
                                ctype = SQL_C_BINARY;
1293
1317
                        if (Z_STRLEN_PP(tmp) > 2 &&
1294
1318
                                Z_STRVAL_PP(tmp)[0] == '\'' &&
1295
1319
                                Z_STRVAL_PP(tmp)[Z_STRLEN_PP(tmp) - 1] == '\'') {
 
1320
                                if (strlen(tmp) != Z_STRLEN_PP(tmp)) {
 
1321
                                        RETURN_FALSE;
 
1322
                                }
 
1323
 
1296
1324
                                filename = estrndup(&Z_STRVAL_PP(tmp)[1], Z_STRLEN_PP(tmp) - 2);
1297
 
                                filename[strlen(filename)] = '\0';
1298
1325
 
1299
1326
                                /* Check for safe mode. */
1300
1327
                                if (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
1306
1333
                                /* Check the basedir */
1307
1334
                                if (php_check_open_basedir(filename TSRMLS_CC)) {
1308
1335
                                        efree(filename);
 
1336
                                        SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
 
1337
                                        for (i = 0; i < result->numparams; i++) {
 
1338
                                                if (params[i].fp != -1) {
 
1339
                                                        close(params[i].fp);
 
1340
                                                }
 
1341
                                        }
1309
1342
                                        efree(params);
1310
1343
                                        RETURN_FALSE;
1311
1344
                                }
1313
1346
                                if ((params[i-1].fp = open(filename,O_RDONLY)) == -1) {
1314
1347
                                        php_error_docref(NULL TSRMLS_CC, E_WARNING,"Can't open file %s", filename);
1315
1348
                                        SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
1316
 
                                        for(i = 0; i < result->numparams; i++) {
 
1349
                                        for (i = 0; i < result->numparams; i++) {
1317
1350
                                                if (params[i].fp != -1) {
1318
1351
                                                        close(params[i].fp);
1319
1352
                                                }
1344
1377
                                                                          Z_STRVAL_PP(tmp), 0,
1345
1378
                                                                          &params[i-1].vallen);
1346
1379
                        }
 
1380
                        if (rc == SQL_ERROR) {
 
1381
                                odbc_sql_error(result->conn_ptr, result->stmt, "SQLBindParameter");     
 
1382
                                SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
 
1383
                                for (i = 0; i < result->numparams; i++) {
 
1384
                                        if (params[i].fp != -1) {
 
1385
                                                close(params[i].fp);
 
1386
                                        }
 
1387
                                }
 
1388
                                efree(params);
 
1389
                                RETURN_FALSE;
 
1390
                        }
1347
1391
                        zend_hash_move_forward(Z_ARRVAL_P(pv_param_arr));
1348
1392
                }
1349
1393
        }