php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #54089
Patch tokenizer_patch_full.txt revision 2011-09-15 14:32 UTC by nikic@php.net
revision 2011-09-13 17:11 UTC by nikic@php.net
Patch tokenizer_patch.txt revision 2011-09-15 14:27 UTC by nikic@php.net
revision 2011-09-13 15:50 UTC by nikic@php.net
revision 2011-09-13 07:51 UTC by nicolas dot grekas+php at gmail dot com

Patch tokenizer_patch.txt for Unknown/Other Function Bug #54089

Patch version 2011-09-15 14:27 UTC

Return to Bug #54089 | Download this patch
This patch renders other patches obsolete

Obsolete patches:

Patch Revisions: 2011-09-15 14:27 UTC | 2011-09-13 15:50 UTC | 2011-09-13 07:51 UTC

Developer: nikic@php.net

Line 1 (now 1), was 29 lines, now 18 lines
 From d6941fad8c0d91a2ffacb0c965b654d1711753b4 Mon Sep 17 00:00:00 2001
 From: Nikita Popov <nikic@chicken.(none)>
 Date: Tue, 13 Sep 2011 09:07:21 +0200
 Subject: [PATCH] Make token_get_all return next three tokens after __halt_compiler
 
 ---
  ext/tokenizer/tests/bug54089.phpt                  |   10 ++++-
  ext/tokenizer/tests/token_get_all_variation16.phpt |   45 ++++++++++++++++++--
  ext/tokenizer/tokenizer.c                          |   10 ++++-
  3 files changed, 57 insertions(+), 8 deletions(-)
 
 diff --git a/ext/tokenizer/tests/bug54089.phpt b/ext/tokenizer/tests/bug54089.phpt
 index e1f6d79..2f40510 100644
 --- a/ext/tokenizer/tests/bug54089.phpt
 +++ b/ext/tokenizer/tests/bug54089.phpt
 @@ -17,7 +17,7 @@ foreach ($tokens as $t)
 Index: ext/tokenizer/tests/bug54089.phpt
 ===================================================================
 --- ext/tokenizer/tests/bug54089.phpt	(revision 316815)
 +++ ext/tokenizer/tests/bug54089.phpt	(working copy)
 @@ -17,7 +17,7 @@
   var_dump($code);
   ?>
   --EXPECTF--
  -array(2) {
  +array(5) {
     [0]=>
     array(3) {
       [0]=>
 @@ -36,5 +36,11 @@ array(2) {
 @@ -36,5 +36,11 @@
       [2]=>
       int(1)
     }
  +  [2]=>


  +  string(1) ";"
   }
  -string(21) "<?php __halt_compiler"
  +string(24) "<?php __halt_compiler();"
 diff --git a/ext/tokenizer/tests/token_get_all_variation16.phpt b/ext/tokenizer/tests/token_get_all_variation16.phpt
 index 39550bd..db9bde1 100644
 --- a/ext/tokenizer/tests/token_get_all_variation16.phpt
 +++ b/ext/tokenizer/tests/token_get_all_variation16.phpt
 @@ -47,17 +47,17 @@ else
 Index: ext/tokenizer/tests/token_get_all_variation16.phpt
 ===================================================================
 --- ext/tokenizer/tests/token_get_all_variation16.phpt	(revision 316815)
 +++ ext/tokenizer/tests/token_get_all_variation16.phpt	(working copy)
 @@ -47,17 +47,17 @@
   
   list($value1,$value2) = $c;
   if(empty($value1) && !isset($value1)) {
  -  __halt_compiler();


  +array(142) {
     [0]=>
     array(3) {
       [0]=>
 @@ -958,9 +958,46 @@ array(135) {
 @@ -958,9 +958,46 @@
       [0]=>
       int(%d)
       [1]=>
  -    string(15) "__halt_compiler"
  +    string(10) "myFunction"
 +    [2]=>
 +    int(26)
 +  }
      [2]=>
      int(26)
    }
  +  [135]=>
  +  string(1) "("
  +  [136]=>
  +  string(1) ")"


  +    int(%d)
  +    [1]=>
  +    string(1) "
  +"
      [2]=>
      int(26)
    }
 +    [2]=>
 +    int(26)
 +  }
  +  [139]=>
  +  string(1) "}"
  +  [140]=>
  +  array(3) {


  +    int(28)
  +  }
   }
   Done
 diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
 index c6c901f..d502f9a 100644
 --- a/ext/tokenizer/tokenizer.c
 +++ b/ext/tokenizer/tokenizer.c
 @@ -106,6 +106,7 @@ static void tokenize(zval *return_value TSRMLS_DC)
 Index: ext/tokenizer/tokenizer.c
 ===================================================================
 --- ext/tokenizer/tokenizer.c	(revision 316815)
 +++ ext/tokenizer/tokenizer.c	(working copy)
 @@ -106,6 +106,7 @@
   	int token_type;
   	zend_bool destroy;
   	int token_line = 1;
  +	int need_tokens = -1; // for __halt_compiler lexing. -1 = disabled
   
   	array_init(return_value);
   
 @@ -152,8 +153,13 @@ static void tokenize(zval *return_value TSRMLS_DC)
 @@ -152,8 +153,16 @@
   
   		token_line = CG(zend_lineno);
   
  -		if (token_type == T_HALT_COMPILER) {
  -			break;
  +		// after T_HALT_COMPILER collect the next three non-dropped tokens
  +		if (need_tokens != -1) {
 +			if (destroy && --need_tokens == 0) {
 +			if (token_type != T_WHITESPACE && token_type != T_OPEN_TAG
 +			    && token_type != T_COMMENT && token_type != T_DOC_COMMENT
 +			    && --need_tokens == 0
 +			) {
  +				break;
  +			}
  +		} else if (token_type == T_HALT_COMPILER) {
  +			need_tokens = 3;
   		}
   	}
   }
 -- 
 1.7.4.1
 
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Thu Apr 24 02:02:10 2014 UTC