Yeah yeah I'm doing some tests on them here before I commit them.  No
worries, I've seen your messages :)

On 14 Feb 2002, Lars Torben Wilson wrote:

> Could someone check these out and commit them (or similar)? At
> the moment, odbc_execute() allows any script to view any file
> without regard to safe_mode or open_basedir, and also under
> certain circumstances can corrupt its parameters. See Bug #15516
> for more info. It may be desirable to change this mechanism
> entirely, since presently you can't use odbc replaceable params
> to enter strings which start and end with quotes.
>
> If these changes are not suitable, could someone email me a
> comment explaining why? Thanks...
>
> Index: php_odbc.c
> ===================================================================
> RCS file: /repository/php4/ext/odbc/php_odbc.c,v
> retrieving revision 1.115
> diff -u -r1.115 php_odbc.c
> --- php_odbc.c        30 Jan 2002 21:54:54 -0000      1.115
> +++ php_odbc.c        13 Feb 2002 08:52:27 -0000
> @@ -943,12 +943,23 @@
>                       else
>                               ctype = SQL_C_CHAR;
>
> -                     if (Z_STRVAL_PP(tmp)[0] == '\'' &&
> +                     if (Z_STRLEN_PP(tmp) > 2 &&
> +                             Z_STRVAL_PP(tmp)[0] == '\'' &&
>                               Z_STRVAL_PP(tmp)[Z_STRLEN_PP(tmp) - 1] == '\'') {
> -                             filename = &Z_STRVAL_PP(tmp)[1];
> -                             filename[Z_STRLEN_PP(tmp) - 2] = '\0';
> +                             filename = estrndup(&Z_STRVAL_PP(tmp)[1], 
>Z_STRLEN_PP(tmp) - 2);
> +                             filename[strlen(filename)] = '\0';
>
> -                if ((params[i-1].fp = open(filename,O_RDONLY)) == -1) {
> +                             /* Check for safe mode. */
> +                             if (PG(safe_mode) &&(!php_checkuid(filename, NULL,
> CHECKUID_CHECK_FILE_AND_DIR))) {
> +                                     RETURN_FALSE;
> +                             }
> +
> +                             /* Check the basedir */
> +                             if (php_check_open_basedir(filename TSRMLS_CC)) {
> +                                     RETURN_FALSE;
> +                             }
> +
> +                             if ((params[i-1].fp = open(filename,O_RDONLY)) == -1) {
>                                       php_error(E_WARNING,"Can't open file %s", 
>filename);
>                                       SQLFreeStmt(result->stmt, SQL_RESET_PARAMS);
>                                       for(i = 0; i < result->numparams; i++) {
> @@ -957,8 +968,11 @@
>                                               }
>                                       }
>                                       efree(params);
> +                                     efree(filename);
>                                       RETURN_FALSE;
>                               }
> +
> +                             efree(filename);
>
>                               params[i-1].vallen = SQL_LEN_DATA_AT_EXEC(0);
>
>
>
>
>
>

>---------------------------------------------------------------<
Dan Kalowsky                    "Tonight I think I'll walk alone.
http://www.deadmime.org/~dank    I'll find soul as I go home."
[EMAIL PROTECTED]                - "Temptation", New Order


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to