FAQ
Hi.
Looking on "Feature/Change Request", i have seen curious things, and i
think that them should issue any error message. See above.

---

Bug #39915 - Trying to access the index of an integer should throw a
warning:

Actual result:

$a = 1234;
$a[0]; // Not shows error


Proposed:
- Shows error message (Fatal error, as happens with objects) for
integer and float variables.
http://felipe.ath.cx/diff/bug39915.diff

---

Bug #42852 - Inconsistent message when creating default object from
empty value:

Actual result:

$obj1->p = 1; // Shows 'Strict Standards ...'

$obj2->p[] = 1; // Not shows

$a = 1;
$obj3->p = &$a; // Not shows


Proposed:
- 'Strict Standards' for all cases.
http://felipe.ath.cx/diff/bug42852.diff

--
Regards,
Felipe Pena.

Search Discussions

  • Cristian Rodriguez at Feb 19, 2008 at 4:05 am
    2008/2/19, Felipe Pena <felipensp@gmail.com>:
    Proposed:
    - Shows error message (Fatal error, as happens with objects) for
    integer and float variables.
    http://felipe.ath.cx/diff/bug39915.diff
    +1 , fatal error for consistency.
    Proposed:
    - 'Strict Standards' for all cases.
    http://felipe.ath.cx/diff/bug42852.diff
    I would make that message an E_NOTICE or E_WARNING.
  • Cristian Rodriguez at Feb 19, 2008 at 4:25 am

    2008/2/19, Cristian Rodriguez <judas.iscariote@gmail.com>:
    2008/2/19, Felipe Pena <felipensp@gmail.com>:
    Proposed:
    - Shows error message (Fatal error, as happens with objects) for
    integer and float variables.
    http://felipe.ath.cx/diff/bug39915.diff
    +1 , fatal error for consistency.
    you need to handle offset of booleans too..

    <?php
    $foo = true;

    var_dump($foo[1]);
    ?>

    Index: Zend/zend_execute.c
    ===================================================================
    RCS file: /repository/ZendEngine2/zend_execute.c,v
    retrieving revision 1.716.2.12.2.24.2.20
    diff -u -p -r1.716.2.12.2.24.2.20 zend_execute.c
    --- Zend/zend_execute.c 18 Feb 2008 12:11:47 -0000 1.716.2.12.2.24.2.20
    +++ Zend/zend_execute.c 19 Feb 2008 04:22:41 -0000
    @@ -1229,6 +1229,15 @@ static void zend_fetch_dimension_address
    }
    return;
    break;
    + case IS_LONG:
    + zend_error_noreturn(E_ERROR, "Cannot use
    integer as array");
    + /* break intentionally missing */
    + case IS_DOUBLE:
    + zend_error_noreturn(E_ERROR, "Cannot use float
    as array");
    + /* break intentionally missing */
    + case IS_BOOL:
    + zend_error_noreturn(E_ERROR, "Cannot use
    boolean as array");
    + /* break intentionally missing */

    default:
    if (result) {
  • Marcus Boerger at Feb 19, 2008 at 11:29 am
    Hello Felipe,

    Tuesday, February 19, 2008, 4:21:20 AM, you wrote:
    Hi.
    Looking on "Feature/Change Request", i have seen curious things, and i
    think that them should issue any error message. See above.
    ---
    Bug #39915 - Trying to access the index of an integer should throw a
    warning:
    Actual result:
    $a = 1234;
    $a[0]; // Not shows error
    Proposed:
    - Shows error message (Fatal error, as happens with objects) for
    integer and float variables.
    http://felipe.ath.cx/diff/bug39915.diff
    This patch results in two error message for type long, one complaining about
    long, one about double. You can use function zend_get_type_by_const() to
    avoid this. Also make sure that we see the new style message for type bool
    and anything else that is not handled right now (aka just use default case).
    ---
    Bug #42852 - Inconsistent message when creating default object from
    empty value:
    Actual result:
    $obj1->p = 1; // Shows 'Strict Standards ...'
    $obj2->p[] = 1; // Not shows
    $a = 1;
    $obj3->p = &$a; // Not shows
    Proposed:
    - 'Strict Standards' for all cases.
    http://felipe.ath.cx/diff/bug42852.diff
    Looks good.

    Best regards,
    Marcus
  • Felipe Pena at Feb 19, 2008 at 11:52 am

    Em Ter, 2008-02-19 às 12:28 +0100, Marcus Boerger escreveu:
    This patch results in two error message for type long, one complaining about
    long, one about double. You can use function zend_get_type_by_const() to
    avoid this. Also make sure that we see the new style message for type bool
    and anything else that is not handled right now (aka just use default case).
    Ooops, I forget that! :D

    Here's: http://felipe.ath.cx/diff/bug39915.diff
    Em Ter, 2008-02-19 às 01:25 -0300, Cristian Rodriguez escreveu:
    you need to handle offset of booleans too..
    Oops! Thanks.



    ... I was sleepy :P
  • Cristian Rodriguez at Feb 19, 2008 at 2:33 pm

    2008/2/19, Felipe Pena <felipensp@gmail.com>:
    Em Ter, 2008-02-19 às 01:25 -0300, Cristian Rodriguez escreveu:
    you need to handle offset of booleans too..
    Oops! Thanks.

    There is a similar case with unset() an offset of booleans and integers.

    <?php
    $foo = true:
    /* should throw a fatal error, like it does when trying to unset string offsets.
    actually $foo remains unchanged after unset() (!!)
    unset($foo[0]);

    Index: Zend/zend_vm_def.h
    ===================================================================
    RCS file: /repository/ZendEngine2/zend_vm_def.h,v
    retrieving revision 1.59.2.29.2.48.2.36
    diff -u -p -r1.59.2.29.2.48.2.36 zend_vm_def.h
    --- Zend/zend_vm_def.h 11 Feb 2008 15:46:10 -0000 1.59.2.29.2.48.2.36
    +++ Zend/zend_vm_def.h 19 Feb 2008 14:32:18 -0000
    @@ -3281,6 +3281,7 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|
    zend_error_noreturn(E_ERROR, "Cannot
    unset string offsets");
    ZEND_VM_CONTINUE(); /* bailed out before */
    default:
    + zend_error_noreturn(E_ERROR, "Cannot
    unset %s offsets", zend_get_type_by_const(Z_TYPE_PP(container)));
    FREE_OP2();
    break;
    }
  • Felipe Pena at Feb 20, 2008 at 3:12 am
    2008/2/19, Cristian Rodriguez <judas.iscariote@gmail.com>:
    There is a similar case with unset() an offset of booleans and integers.

    <?php
    $foo = true:
    /* should throw a fatal error, like it does when trying to unset string
    offsets.
    actually $foo remains unchanged after unset() (!!)
    unset($foo[0]);

    Index: Zend/zend_vm_def.h
    ===================================================================
    RCS file: /repository/ZendEngine2/zend_vm_def.h,v
    retrieving revision 1.59.2.29.2.48.2.36
    diff -u -p -r1.59.2.29.2.48.2.36 zend_vm_def.h
    --- Zend/zend_vm_def.h 11 Feb 2008 15:46:10 -0000
    1.59.2.29.2.48.2.36
    +++ Zend/zend_vm_def.h 19 Feb 2008 14:32:18 -0000
    @@ -3281,6 +3281,7 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|
    zend_error_noreturn(E_ERROR, "Cannot
    unset string offsets");
    ZEND_VM_CONTINUE(); /* bailed out before
    */
    default:
    + zend_error_noreturn(E_ERROR, "Cannot
    unset %s offsets", zend_get_type_by_const(Z_TYPE_PP(container)));
    FREE_OP2();
    break;
    }
    Added!
    I have updated the patch, because the bool variables (used internally on
    foreach, list(.., ..) = each(...), for example) are passed also to
    zend_fetch_dimension_address_read(), what break the previous patch (default:
    zend_error...) Then, i think that this could be handled in zend_vm_def.h,
    checking for OP1_TYPE != IS_VAR when the type is boolean.
    Well, i don't know how the Zend Engine works properly... So, If i said
    anything wrong, let me know, please.
    Finally, this was my suggestion.
    http://felipe.ath.cx/diff/bug39915.diff
    Thanks.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-internals @
categoriesphp
postedFeb 19, '08 at 3:21a
activeFeb 20, '08 at 3:12a
posts7
users3
websitephp.net

People

Translate

site design / logo © 2022 Grokbase