[PHP-CVS] com php-src: Fixed Bug #63738 unpack: back result with Z format: ext/standard/pack.c ext/standard/tests/strings/pack_Z.phpt

2012-12-11 Thread Remi Collet
Commit:4d8d5d83fce83c32a04cd8d8cf50d909ab101f38
Author:Remi Collet  Tue, 11 Dec 2012 16:30:08 +0100
Parents:   a9a5f7aca61d4bec9ce2cf5dc967bb7c0ed651cd
Branches:  PHP-5.5

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=4d8d5d83fce83c32a04cd8d8cf50d909ab101f38

Log:
Fixed Bug #63738 unpack: back result with Z format

Fix result for empty string.
Same output as perl
perl -e 'print unpack("Z2","\0\0");' => ""
perl -e 'print unpack("Z2","A\0");'  => "A"
perl -e 'print unpack("Z2","AB\0");' => "AB"
perl -e 'print unpack("Z2","ABC\0");'=> "AB"

Bugs:
https://bugs.php.net/63738

Changed paths:
  M  ext/standard/pack.c
  M  ext/standard/tests/strings/pack_Z.phpt


Diff:
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
index 9894746..0472cb2 100644
--- a/ext/standard/pack.c
+++ b/ext/standard/pack.c
@@ -729,8 +729,7 @@ PHP_FUNCTION(unpack)
size = len;
 
/* Remove everything after the 
first null */
-   s = 0;
-   while (s++ <= len) {
+   for (s=0 ; s < len ; s++) {
if (input[inputpos + s] 
== pad)
break;
}
diff --git a/ext/standard/tests/strings/pack_Z.phpt 
b/ext/standard/tests/strings/pack_Z.phpt
index 8a2ee67..4fd007a 100644
--- a/ext/standard/tests/strings/pack_Z.phpt
+++ b/ext/standard/tests/strings/pack_Z.phpt
@@ -9,9 +9,15 @@ var_dump(
 pack("Z4", "foo"),
pack("Z*", "foo"),
 unpack("Z*", "foo\0\rbar\0 \t\r\n"),
-unpack("Z9", "foo\0\rbar\0 \t\r\n")
+unpack("Z9", "foo\0\rbar\0 \t\r\n"),
+unpack("Z2", "\0"),
+unpack("Z2", "\0\0"),
+unpack("Z2", "A\0"),
+unpack("Z2", "AB\0"),
+unpack("Z2", "ABC")
 );
 --EXPECTF--
+Warning: unpack(): Type Z: not enough input, need 2, have 1 in %s on line %d
 string(0) ""
 string(5) "foo%c%c"
 string(4) "foo%c"
@@ -25,3 +31,20 @@ array(1) {
   [1]=>
   string(3) "foo"
 }
+bool(false)
+array(1) {
+  [1]=>
+  string(0) ""
+}
+array(1) {
+  [1]=>
+  string(1) "A"
+}
+array(1) {
+  [1]=>
+  string(2) "AB"
+}
+array(1) {
+  [1]=>
+  string(2) "AB"
+}


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] com php-src: - generators API exported for extensions - improved RETURN sequence to avoid redundant check if op_array is a generator: Zend/zend_generators.c Zend/zend_generators.h Zend/zend_

2012-12-11 Thread Dmitry Stogov
Commit:a9a5f7aca61d4bec9ce2cf5dc967bb7c0ed651cd
Author:Dmitry Stogov  Tue, 11 Dec 2012 17:25:32 
+0400
Parents:   8bb106d20c8f36d814772c45d693af2b42b06732
Branches:  PHP-5.5 master

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=a9a5f7aca61d4bec9ce2cf5dc967bb7c0ed651cd

Log:
- generators API exported for extensions
- improved RETURN sequence to avoid redundant check if op_array is a generator

Changed paths:
  M  Zend/zend_generators.c
  M  Zend/zend_generators.h
  M  Zend/zend_vm_def.h
  M  Zend/zend_vm_execute.h

diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index dc7ae14..1844be8 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -27,7 +27,7 @@
 ZEND_API zend_class_entry *zend_ce_generator;
 static zend_object_handlers zend_generator_handlers;
 
-void zend_generator_close(zend_generator *generator, zend_bool 
finished_execution TSRMLS_DC) /* {{{ */
+ZEND_API void zend_generator_close(zend_generator *generator, zend_bool 
finished_execution TSRMLS_DC) /* {{{ */
 {
if (generator->execute_data) {
zend_execute_data *execute_data = generator->execute_data;
@@ -338,7 +338,7 @@ static zend_object_value 
zend_generator_create(zend_class_entry *class_type TSRM
 
 /* Requires globals EG(scope), EG(current_scope), EG(This),
  * EG(active_symbol_table) and EG(current_execute_data). */
-zval *zend_generator_create_zval(zend_op_array *op_array TSRMLS_DC) /* {{{ */
+ZEND_API zval *zend_generator_create_zval(zend_op_array *op_array TSRMLS_DC) 
/* {{{ */
 {
zval *return_value;
zend_generator *generator;
@@ -399,7 +399,7 @@ static zend_function *zend_generator_get_constructor(zval 
*object TSRMLS_DC) /*
 }
 /* }}} */
 
-void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{ */
+ZEND_API void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* 
{{{ */
 {
if (EG(exception)) {
return;
diff --git a/Zend/zend_generators.h b/Zend/zend_generators.h
index 90f8160..7e6da13 100644
--- a/Zend/zend_generators.h
+++ b/Zend/zend_generators.h
@@ -62,9 +62,9 @@ static const zend_uchar ZEND_GENERATOR_FORCED_CLOSE  = 
0x2;
 static const zend_uchar ZEND_GENERATOR_AT_FIRST_YIELD= 0x4;
 
 void zend_register_generator_ce(TSRMLS_D);
-zval *zend_generator_create_zval(zend_op_array *op_array TSRMLS_DC);
-void zend_generator_close(zend_generator *generator, zend_bool 
finished_execution TSRMLS_DC);
-void zend_generator_resume(zend_generator *generator TSRMLS_DC);
+ZEND_API zval *zend_generator_create_zval(zend_op_array *op_array TSRMLS_DC);
+ZEND_API void zend_generator_close(zend_generator *generator, zend_bool 
finished_execution TSRMLS_DC);
+ZEND_API void zend_generator_resume(zend_generator *generator TSRMLS_DC);
 
 #endif
 
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index edbffe1..c5d1748 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1850,18 +1850,6 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
/* return from finally block called because of unhandled 
exception */
zend_exception_restore(TSRMLS_C);   
}
-   
-   /* Generators go throw a different cleanup process */
-   if (UNEXPECTED((EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) != 0)) {
-   /* The generator object is stored in return_value_ptr_ptr */
-   zend_generator *generator = (zend_generator *) 
EG(return_value_ptr_ptr);
-
-   /* Close the generator to free up resources */
-   zend_generator_close(generator, 1 TSRMLS_CC);
-
-   /* Pass execution back to handling code */
-   ZEND_VM_RETURN();
-   }
 
EG(current_execute_data) = EX(prev_execute_data);
EG(opline_ptr) = NULL;
@@ -2969,7 +2957,20 @@ ZEND_VM_HANDLER(111, ZEND_RETURN_BY_REF, 
CONST|TMP|VAR|CV, ANY)
 
 ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, ANY, ANY)
 {
-   ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
+   /* The generator object is stored in return_value_ptr_ptr */
+   zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
+
+   if (EXPECTED(EG(exception) == NULL) &&
+   UNEXPECTED(EG(prev_exception) != NULL)) {
+   /* return from finally block called because of unhandled 
exception */
+   zend_exception_restore(TSRMLS_C);   
+   }
+
+   /* Close the generator to free up resources */
+   zend_generator_close(generator, 1 TSRMLS_CC);
+
+   /* Pass execution back to handling code */
+   ZEND_VM_RETURN();
 }
 
 ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY)
@@ -5124,7 +5125,11 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[catch_op_num]);
ZEND_VM_CONTINUE();
} else {
-   ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
+   if (UNEXPECTED((EX(op_array)->fn_flags & ZEND_AC

[PHP-CVS] com php-src: Merge branch 'PHP-5.4' into PHP-5.5: ext/json/json.c

2012-12-11 Thread Adam Harvey
Commit:8bb106d20c8f36d814772c45d693af2b42b06732
Author:Adam Harvey  Tue, 11 Dec 2012 19:53:02 +0800
Parents:   ec83534d88da4c96777b86d8db7fd20a52ed012e 
2d1694d4ebd51ab61f12e6bc545a17e3baf3b4a0
Branches:  PHP-5.5 master

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=8bb106d20c8f36d814772c45d693af2b42b06732

Log:
Merge branch 'PHP-5.4' into PHP-5.5

* PHP-5.4:
  Alter php_json_decode_ex() to respect JSON_BIGINT_AS_STRING for bare numbers.

Changed paths:
  MM  ext/json/json.c


Diff:



--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] com php-src: Alter php_json_decode_ex() to respect JSON_BIGINT_AS_STRING for bare numbers.: NEWS ext/json/json.c ext/json/tests/bug63737.phpt

2012-12-11 Thread Adam Harvey
Commit:2d1694d4ebd51ab61f12e6bc545a17e3baf3b4a0
Author:Adam Harvey  Tue, 11 Dec 2012 19:51:30 +0800
Parents:   95fd52ff3d3cc2162baf4d30fe06cf37da398050
Branches:  PHP-5.4 PHP-5.5 master

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=2d1694d4ebd51ab61f12e6bc545a17e3baf3b4a0

Log:
Alter php_json_decode_ex() to respect JSON_BIGINT_AS_STRING for bare numbers.

Fixes bug #63737 (json_decode does not properly decode with options parameter).

Bugs:
https://bugs.php.net/63737

Changed paths:
  M  NEWS
  M  ext/json/json.c
  A  ext/json/tests/bug63737.phpt


Diff:
diff --git a/NEWS b/NEWS
index 29b62a3..0504472 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ PHP
NEWS
 |||
 ?? ??? 2012, PHP 5.4.11
 
+- JSON:
+  . Fixed bug #63737 (json_decode does not properly decode with options
+parameter). (Adam)
+
 ?? ??? 2012, PHP 5.4.10
 
 - Core:
diff --git a/ext/json/json.c b/ext/json/json.c
index fb01529..e26c369 100644
--- a/ext/json/json.c
+++ b/ext/json/json.c
@@ -682,7 +682,7 @@ PHP_JSON_API void php_json_decode_ex(zval *return_value, 
char *str, int str_len,
else
{
double d;
-   int type;
+   int type, overflow_info;
long p;
 
RETVAL_NULL();
@@ -698,11 +698,36 @@ PHP_JSON_API void php_json_decode_ex(zval *return_value, 
char *str, int str_len,
RETVAL_BOOL(0);
}
 
-   if ((type = is_numeric_string(str, str_len, &p, &d, 0)) != 0) {
+   if ((type = is_numeric_string_ex(str, str_len, &p, &d, 0, 
&overflow_info)) != 0) {
if (type == IS_LONG) {
RETVAL_LONG(p);
} else if (type == IS_DOUBLE) {
-   RETVAL_DOUBLE(d);
+   if (options & PHP_JSON_BIGINT_AS_STRING && 
overflow_info) {
+   /* Within an object or array, a numeric 
literal is assumed
+* to be an integer if and only if it's 
entirely made up of
+* digits (exponent notation will 
result in the number
+* being treated as a double). We'll 
match that behaviour
+* here. */
+   int i;
+   zend_bool is_float = 0;
+
+   for (i = (str[0] == '-' ? 1 : 0); i < 
str_len; i++) {
+   /* Not using isdigit() because 
it's locale specific,
+* but we expect JSON input to 
always be UTF-8. */
+   if (str[i] < '0' || str[i] > 
'9') {
+   is_float = 1;
+   break;
+   }
+   }
+
+   if (is_float) {
+   RETVAL_DOUBLE(d);
+   } else {
+   RETVAL_STRINGL(str, str_len, 1);
+   }
+   } else {
+   RETVAL_DOUBLE(d);
+   }
}
}
 
diff --git a/ext/json/tests/bug63737.phpt b/ext/json/tests/bug63737.phpt
new file mode 100644
index 000..1fb06d4
--- /dev/null
+++ b/ext/json/tests/bug63737.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #63737 (json_decode does not properly decode with options parameter)
+--SKIPIF--
+
+--FILE--
+
+--EXPECT--
+float(1.2345678901235E+29)
+string(30) "123456789012345678901234567890"
+float(-1.2345678901235E+29)
+string(31) "-123456789012345678901234567890"
+float(1.2345678901235E+29)
+float(1.2345678901235E+29)
+float(-1.2345678901235E+29)
+float(-1.2345678901235E+29)
+Done


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php