File tree Expand file tree Collapse file tree 2 files changed +57
-0
lines changed Expand file tree Collapse file tree 2 files changed +57
-0
lines changed Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ GH-15496: Session handler ob_start crash
3
+ --FILE--
4
+ <?php
5
+ class MySessionHandler implements SessionHandlerInterface
6
+ {
7
+ public function open ($ save_path , $ session_name ): bool
8
+ {
9
+ return true ;
10
+ }
11
+
12
+ public function close (): bool
13
+ {
14
+ return true ;
15
+ }
16
+
17
+ public function read ($ id ): string
18
+ {
19
+ return '' ;
20
+ }
21
+
22
+ public function write ($ id , $ sess_data ): bool
23
+ {
24
+ ob_start (function () {});
25
+
26
+ return true ;
27
+ }
28
+
29
+ public function destroy ($ id ): bool
30
+ {
31
+ return true ;
32
+ }
33
+
34
+ public function gc ($ maxlifetime ): int
35
+ {
36
+ return 0 ;
37
+ }
38
+ }
39
+
40
+ session_set_save_handler (new MySessionHandler ());
41
+ session_start ();
42
+
43
+ ob_start (function () {
44
+ var_dump ($ b );
45
+ });
46
+
47
+ while (1 ) {
48
+ $ a [] = 1 ;
49
+ }
50
+ ?>
51
+ --EXPECTF--
52
+ Fatal error: {closure%s}(): Cannot use output buffering in output buffering display handlers in %s on line %d
53
+
54
+ Notice: ob_start(): Failed to create buffer in %s on line %d
Original file line number Diff line number Diff line change @@ -538,6 +538,9 @@ PHPAPI int php_output_handler_start(php_output_handler *handler)
538
538
if (php_output_lock_error (PHP_OUTPUT_HANDLER_START ) || !handler ) {
539
539
return FAILURE ;
540
540
}
541
+ if (!(OG (flags ) & PHP_OUTPUT_ACTIVATED )) {
542
+ return FAILURE ;
543
+ }
541
544
if (NULL != (conflict = zend_hash_find_ptr (& php_output_handler_conflicts , handler -> name ))) {
542
545
if (SUCCESS != conflict (ZSTR_VAL (handler -> name ), ZSTR_LEN (handler -> name ))) {
543
546
return FAILURE ;
You can’t perform that action at this time.
0 commit comments