diff --git a/tests/bug01486-001-opcache.phpt b/tests/bug01486-001-opcache.phpt new file mode 100644 index 000000000..d28b6a82c --- /dev/null +++ b/tests/bug01486-001-opcache.phpt @@ -0,0 +1,195 @@ +--TEST-- +Test for bug #1486: Crash on ZEND_SWITCH_LONG / ZEND_SWITCH_STRING +--SKIPIF-- +=')) echo "skip >= PHP 7.2 needed\n"; +if (!extension_loaded('zend opcache')) echo "skip opcache required\n"; +?> +--FILE-- + +--EXPECTF-- +foo 38 +foo 1 +foo 17 +foo 23 +{main} +- branches + - 00; OP: 00-01; line: 02-02 HIT; out1: 02 HIT; out2: 366 X + - 02; OP: 02-02; line: 02-02 HIT; out1: 03 HIT; out2: 366 HIT + - 03; OP: 03-05; line: 02-03 HIT; out1: 86 HIT; out2: 93 X ; out3: 100 X ; out4: 107 X ; out5: 114 X ; out6: 121 X ; out7: 128 X ; out8: 135 X ; out9: 142 X ; out10: 149 X ; out11: 156 X ; out12: 163 X ; out13: 170 X ; out14: 177 X ; out15: 184 X ; out16: 191 X ; out17: 198 HIT; out18: 205 X ; out19: 212 X ; out20: 219 X ; out21: 226 X ; out22: 233 X ; out23: 240 HIT; out24: 247 X ; out25: 254 X ; out26: 261 X ; out27: 268 X ; out28: 275 X ; out29: 282 X ; out30: 289 X ; out31: 296 X ; out32: 303 X ; out33: 310 X ; out34: 317 X ; out35: 324 X ; out36: 331 X ; out37: 338 X ; out38: 345 HIT; out39: 352 X ; out40: 359 X ; out41: 365 X ; out42: 06 X + - 06; OP: 06-07; line: 04-04 X ; out1: 08 X ; out2: 86 X + - 08; OP: 08-09; line: 05-05 X ; out1: 10 X ; out2: 93 X + - 10; OP: 10-11; line: 06-06 X ; out1: 12 X ; out2: 100 X + - 12; OP: 12-13; line: 07-07 X ; out1: 14 X ; out2: 107 X + - 14; OP: 14-15; line: 08-08 X ; out1: 16 X ; out2: 114 X + - 16; OP: 16-17; line: 09-09 X ; out1: 18 X ; out2: 121 X + - 18; OP: 18-19; line: 10-10 X ; out1: 20 X ; out2: 128 X + - 20; OP: 20-21; line: 11-11 X ; out1: 22 X ; out2: 135 X + - 22; OP: 22-23; line: 12-12 X ; out1: 24 X ; out2: 142 X + - 24; OP: 24-25; line: 13-13 X ; out1: 26 X ; out2: 149 X + - 26; OP: 26-27; line: 14-14 X ; out1: 28 X ; out2: 156 X + - 28; OP: 28-29; line: 15-15 X ; out1: 30 X ; out2: 163 X + - 30; OP: 30-31; line: 16-16 X ; out1: 32 X ; out2: 170 X + - 32; OP: 32-33; line: 17-17 X ; out1: 34 X ; out2: 177 X + - 34; OP: 34-35; line: 18-18 X ; out1: 36 X ; out2: 184 X + - 36; OP: 36-37; line: 19-19 X ; out1: 38 X ; out2: 191 X + - 38; OP: 38-39; line: 20-20 X ; out1: 40 X ; out2: 198 X + - 40; OP: 40-41; line: 21-21 X ; out1: 42 X ; out2: 205 X + - 42; OP: 42-43; line: 22-22 X ; out1: 44 X ; out2: 212 X + - 44; OP: 44-45; line: 23-23 X ; out1: 46 X ; out2: 219 X + - 46; OP: 46-47; line: 24-24 X ; out1: 48 X ; out2: 226 X + - 48; OP: 48-49; line: 25-25 X ; out1: 50 X ; out2: 233 X + - 50; OP: 50-51; line: 26-26 X ; out1: 52 X ; out2: 240 X + - 52; OP: 52-53; line: 27-27 X ; out1: 54 X ; out2: 247 X + - 54; OP: 54-55; line: 28-28 X ; out1: 56 X ; out2: 254 X + - 56; OP: 56-57; line: 29-29 X ; out1: 58 X ; out2: 261 X + - 58; OP: 58-59; line: 30-30 X ; out1: 60 X ; out2: 268 X + - 60; OP: 60-61; line: 31-31 X ; out1: 62 X ; out2: 275 X + - 62; OP: 62-63; line: 32-32 X ; out1: 64 X ; out2: 282 X + - 64; OP: 64-65; line: 33-33 X ; out1: 66 X ; out2: 289 X + - 66; OP: 66-67; line: 34-34 X ; out1: 68 X ; out2: 296 X + - 68; OP: 68-69; line: 35-35 X ; out1: 70 X ; out2: 303 X + - 70; OP: 70-71; line: 36-36 X ; out1: 72 X ; out2: 310 X + - 72; OP: 72-73; line: 37-37 X ; out1: 74 X ; out2: 317 X + - 74; OP: 74-75; line: 38-38 X ; out1: 76 X ; out2: 324 X + - 76; OP: 76-77; line: 39-39 X ; out1: 78 X ; out2: 331 X + - 78; OP: 78-79; line: 40-40 X ; out1: 80 X ; out2: 338 X + - 80; OP: 80-81; line: 41-41 X ; out1: 82 X ; out2: 345 X + - 82; OP: 82-83; line: 42-42 X ; out1: 84 X ; out2: 352 X + - 84; OP: 84-85; line: 43-43 X ; out1: 02 X ; out2: 359 X + - 86; OP: 86-92; line: 04-04 HIT; out1: 02 HIT + - 93; OP: 93-99; line: 05-05 X ; out1: 02 X + - 100; OP: 100-106; line: 06-06 X ; out1: 02 X + - 107; OP: 107-113; line: 07-07 X ; out1: 02 X + - 114; OP: 114-120; line: 08-08 X ; out1: 02 X + - 121; OP: 121-127; line: 09-09 X ; out1: 02 X + - 128; OP: 128-134; line: 10-10 X ; out1: 02 X + - 135; OP: 135-141; line: 11-11 X ; out1: 02 X + - 142; OP: 142-148; line: 12-12 X ; out1: 02 X + - 149; OP: 149-155; line: 13-13 X ; out1: 02 X + - 156; OP: 156-162; line: 14-14 X ; out1: 02 X + - 163; OP: 163-169; line: 15-15 X ; out1: 02 X + - 170; OP: 170-176; line: 16-16 X ; out1: 02 X + - 177; OP: 177-183; line: 17-17 X ; out1: 02 X + - 184; OP: 184-190; line: 18-18 X ; out1: 02 X + - 191; OP: 191-197; line: 19-19 X ; out1: 02 X + - 198; OP: 198-204; line: 20-20 HIT; out1: 02 HIT + - 205; OP: 205-211; line: 21-21 X ; out1: 02 X + - 212; OP: 212-218; line: 22-22 X ; out1: 02 X + - 219; OP: 219-225; line: 23-23 X ; out1: 02 X + - 226; OP: 226-232; line: 24-24 X ; out1: 02 X + - 233; OP: 233-239; line: 25-25 X ; out1: 02 X + - 240; OP: 240-246; line: 26-26 HIT; out1: 02 HIT + - 247; OP: 247-253; line: 27-27 X ; out1: 02 X + - 254; OP: 254-260; line: 28-28 X ; out1: 02 X + - 261; OP: 261-267; line: 29-29 X ; out1: 02 X + - 268; OP: 268-274; line: 30-30 X ; out1: 02 X + - 275; OP: 275-281; line: 31-31 X ; out1: 02 X + - 282; OP: 282-288; line: 32-32 X ; out1: 02 X + - 289; OP: 289-295; line: 33-33 X ; out1: 02 X + - 296; OP: 296-302; line: 34-34 X ; out1: 02 X + - 303; OP: 303-309; line: 35-35 X ; out1: 02 X + - 310; OP: 310-316; line: 36-36 X ; out1: 02 X + - 317; OP: 317-323; line: 37-37 X ; out1: 02 X + - 324; OP: 324-330; line: 38-38 X ; out1: 02 X + - 331; OP: 331-337; line: 39-39 X ; out1: 02 X + - 338; OP: 338-344; line: 40-40 X ; out1: 02 X + - 345; OP: 345-351; line: 41-41 HIT; out1: 02 HIT + - 352; OP: 352-358; line: 42-42 X ; out1: 02 X + - 359; OP: 359-364; line: 43-43 X ; out1: 365 X + - 365; OP: 365-365; line: 43-43 X ; out1: 02 X + - 366; OP: 366-367; line: 43-46 HIT; out1: EX X +- paths + - 0 2 3 86 2 366: X + - 0 2 3 93 2 366: X + - 0 2 3 100 2 366: X + - 0 2 3 107 2 366: X + - 0 2 3 114 2 366: X + - 0 2 3 121 2 366: X + - 0 2 3 128 2 366: X + - 0 2 3 135 2 366: X + - 0 2 3 142 2 366: X + - 0 2 3 149 2 366: X + - 0 2 3 156 2 366: X + - 0 2 3 163 2 366: X + - 0 2 3 170 2 366: X + - 0 2 3 177 2 366: X + - 0 2 3 184 2 366: X + - 0 2 3 191 2 366: X + - 0 2 3 198 2 366: X + - 0 2 3 205 2 366: X + - 0 2 3 212 2 366: X + - 0 2 3 219 2 366: X + - 0 2 3 226 2 366: X + - 0 2 3 233 2 366: X + - 0 2 3 240 2 366: X + - 0 2 3 247 2 366: X + - 0 2 3 254 2 366: X + - 0 2 3 261 2 366: X + - 0 2 3 268 2 366: X + - 0 2 3 275 2 366: X + - 0 2 3 282 2 366: X + - 0 2 3 289 2 366: X + - 0 2 3 296 2 366: X + - 0 2 3 303 2 366: X + - 0 2 3 310 2 366: X + - 0 2 3 317 2 366: X + - 0 2 3 324 2 366: X + - 0 2 3 331 2 366: X + - 0 2 3 338 2 366: X + - 0 2 3 345 2 366: X + - 0 2 3 352 2 366: X + - 0 2 3 359 365 2 366: X + - 0 2 3 365 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 359 365 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 352 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 345 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 338 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 331 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 324 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 317 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 310 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 303 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 296 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 289 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 282 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 275 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 268 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 261 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 254 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 247 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 240 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 233 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 226 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 219 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 212 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 205 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 198 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 191 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 184 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 177 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 170 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 163 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 156 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 149 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 22 142 2 366: X + - 0 2 3 6 8 10 12 14 16 18 20 135 2 366: X + - 0 2 3 6 8 10 12 14 16 18 128 2 366: X + - 0 2 3 6 8 10 12 14 16 121 2 366: X + - 0 2 3 6 8 10 12 14 114 2 366: X + - 0 2 3 6 8 10 12 107 2 366: X + - 0 2 3 6 8 10 100 2 366: X + - 0 2 3 6 8 93 2 366: X + - 0 2 3 6 86 2 366: X + - 0 2 366: X + - 0 366: X diff --git a/tests/bug01486-001.inc b/tests/bug01486-001.inc new file mode 100644 index 000000000..343e80a62 --- /dev/null +++ b/tests/bug01486-001.inc @@ -0,0 +1,45 @@ + $v) { + switch ($v) { + case 1: echo "foo {$v}\n"; break; + case 2: echo "foo {$v}\n"; break; + case 3: echo "foo {$v}\n"; break; + case 4: echo "foo {$v}\n"; break; + case 5: echo "foo {$v}\n"; break; + case 6: echo "foo {$v}\n"; break; + case 7: echo "foo {$v}\n"; break; + case 8: echo "foo {$v}\n"; break; + case 9: echo "foo {$v}\n"; break; + case 10: echo "foo {$v}\n"; break; + case 11: echo "foo {$v}\n"; break; + case 12: echo "foo {$v}\n"; break; + case 13: echo "foo {$v}\n"; break; + case 14: echo "foo {$v}\n"; break; + case 15: echo "foo {$v}\n"; break; + case 16: echo "foo {$v}\n"; break; + case 17: echo "foo {$v}\n"; break; + case 18: echo "foo {$v}\n"; break; + case 19: echo "foo {$v}\n"; break; + case 20: echo "foo {$v}\n"; break; + case 21: echo "foo {$v}\n"; break; + case 22: echo "foo {$v}\n"; break; + case 23: echo "foo {$v}\n"; break; + case 24: echo "foo {$v}\n"; break; + case 25: echo "foo {$v}\n"; break; + case 26: echo "foo {$v}\n"; break; + case 27: echo "foo {$v}\n"; break; + case 28: echo "foo {$v}\n"; break; + case 29: echo "foo {$v}\n"; break; + case 30: echo "foo {$v}\n"; break; + case 31: echo "foo {$v}\n"; break; + case 32: echo "foo {$v}\n"; break; + case 33: echo "foo {$v}\n"; break; + case 34: echo "foo {$v}\n"; break; + case 35: echo "foo {$v}\n"; break; + case 36: echo "foo {$v}\n"; break; + case 37: echo "foo {$v}\n"; break; + case 38: echo "foo {$v}\n"; break; + case 39: echo "foo {$v}\n"; break; + case 40: echo "foo {$v}\n"; break; + } +} diff --git a/tests/bug01486-001.phpt b/tests/bug01486-001.phpt new file mode 100644 index 000000000..059fe152e --- /dev/null +++ b/tests/bug01486-001.phpt @@ -0,0 +1,196 @@ +--TEST-- +Test for bug #1486: Crash on ZEND_SWITCH_LONG / ZEND_SWITCH_STRING +--SKIPIF-- +=')) echo "skip >= PHP 7.2 needed\n"; +if (extension_loaded('zend opcache')) echo "skip opcache should not be loaded\n"; +?> +--FILE-- + +--EXPECTF-- +foo 38 +foo 1 +foo 17 +foo 23 +{main} +- branches + - 00; OP: 00-01; line: 02-02 HIT; out1: 02 HIT; out2: 368 X + - 02; OP: 02-02; line: 02-02 HIT; out1: 03 HIT; out2: 368 HIT + - 03; OP: 03-05; line: 02-03 HIT; out1: 87 HIT; out2: 94 X ; out3: 101 X ; out4: 108 X ; out5: 115 X ; out6: 122 X ; out7: 129 X ; out8: 136 X ; out9: 143 X ; out10: 150 X ; out11: 157 X ; out12: 164 X ; out13: 171 X ; out14: 178 X ; out15: 185 X ; out16: 192 X ; out17: 199 HIT; out18: 206 X ; out19: 213 X ; out20: 220 X ; out21: 227 X ; out22: 234 X ; out23: 241 HIT; out24: 248 X ; out25: 255 X ; out26: 262 X ; out27: 269 X ; out28: 276 X ; out29: 283 X ; out30: 290 X ; out31: 297 X ; out32: 304 X ; out33: 311 X ; out34: 318 X ; out35: 325 X ; out36: 332 X ; out37: 339 X ; out38: 346 HIT; out39: 353 X ; out40: 360 X ; out41: 367 X ; out42: 06 X + - 06; OP: 06-07; line: 04-04 X ; out1: 08 X ; out2: 87 X + - 08; OP: 08-09; line: 05-05 X ; out1: 10 X ; out2: 94 X + - 10; OP: 10-11; line: 06-06 X ; out1: 12 X ; out2: 101 X + - 12; OP: 12-13; line: 07-07 X ; out1: 14 X ; out2: 108 X + - 14; OP: 14-15; line: 08-08 X ; out1: 16 X ; out2: 115 X + - 16; OP: 16-17; line: 09-09 X ; out1: 18 X ; out2: 122 X + - 18; OP: 18-19; line: 10-10 X ; out1: 20 X ; out2: 129 X + - 20; OP: 20-21; line: 11-11 X ; out1: 22 X ; out2: 136 X + - 22; OP: 22-23; line: 12-12 X ; out1: 24 X ; out2: 143 X + - 24; OP: 24-25; line: 13-13 X ; out1: 26 X ; out2: 150 X + - 26; OP: 26-27; line: 14-14 X ; out1: 28 X ; out2: 157 X + - 28; OP: 28-29; line: 15-15 X ; out1: 30 X ; out2: 164 X + - 30; OP: 30-31; line: 16-16 X ; out1: 32 X ; out2: 171 X + - 32; OP: 32-33; line: 17-17 X ; out1: 34 X ; out2: 178 X + - 34; OP: 34-35; line: 18-18 X ; out1: 36 X ; out2: 185 X + - 36; OP: 36-37; line: 19-19 X ; out1: 38 X ; out2: 192 X + - 38; OP: 38-39; line: 20-20 X ; out1: 40 X ; out2: 199 X + - 40; OP: 40-41; line: 21-21 X ; out1: 42 X ; out2: 206 X + - 42; OP: 42-43; line: 22-22 X ; out1: 44 X ; out2: 213 X + - 44; OP: 44-45; line: 23-23 X ; out1: 46 X ; out2: 220 X + - 46; OP: 46-47; line: 24-24 X ; out1: 48 X ; out2: 227 X + - 48; OP: 48-49; line: 25-25 X ; out1: 50 X ; out2: 234 X + - 50; OP: 50-51; line: 26-26 X ; out1: 52 X ; out2: 241 X + - 52; OP: 52-53; line: 27-27 X ; out1: 54 X ; out2: 248 X + - 54; OP: 54-55; line: 28-28 X ; out1: 56 X ; out2: 255 X + - 56; OP: 56-57; line: 29-29 X ; out1: 58 X ; out2: 262 X + - 58; OP: 58-59; line: 30-30 X ; out1: 60 X ; out2: 269 X + - 60; OP: 60-61; line: 31-31 X ; out1: 62 X ; out2: 276 X + - 62; OP: 62-63; line: 32-32 X ; out1: 64 X ; out2: 283 X + - 64; OP: 64-65; line: 33-33 X ; out1: 66 X ; out2: 290 X + - 66; OP: 66-67; line: 34-34 X ; out1: 68 X ; out2: 297 X + - 68; OP: 68-69; line: 35-35 X ; out1: 70 X ; out2: 304 X + - 70; OP: 70-71; line: 36-36 X ; out1: 72 X ; out2: 311 X + - 72; OP: 72-73; line: 37-37 X ; out1: 74 X ; out2: 318 X + - 74; OP: 74-75; line: 38-38 X ; out1: 76 X ; out2: 325 X + - 76; OP: 76-77; line: 39-39 X ; out1: 78 X ; out2: 332 X + - 78; OP: 78-79; line: 40-40 X ; out1: 80 X ; out2: 339 X + - 80; OP: 80-81; line: 41-41 X ; out1: 82 X ; out2: 346 X + - 82; OP: 82-83; line: 42-42 X ; out1: 84 X ; out2: 353 X + - 84; OP: 84-85; line: 43-43 X ; out1: 86 X ; out2: 360 X + - 86; OP: 86-86; line: 43-43 X ; out1: 367 X + - 87; OP: 87-93; line: 04-04 HIT; out1: 367 HIT + - 94; OP: 94-100; line: 05-05 X ; out1: 367 X + - 101; OP: 101-107; line: 06-06 X ; out1: 367 X + - 108; OP: 108-114; line: 07-07 X ; out1: 367 X + - 115; OP: 115-121; line: 08-08 X ; out1: 367 X + - 122; OP: 122-128; line: 09-09 X ; out1: 367 X + - 129; OP: 129-135; line: 10-10 X ; out1: 367 X + - 136; OP: 136-142; line: 11-11 X ; out1: 367 X + - 143; OP: 143-149; line: 12-12 X ; out1: 367 X + - 150; OP: 150-156; line: 13-13 X ; out1: 367 X + - 157; OP: 157-163; line: 14-14 X ; out1: 367 X + - 164; OP: 164-170; line: 15-15 X ; out1: 367 X + - 171; OP: 171-177; line: 16-16 X ; out1: 367 X + - 178; OP: 178-184; line: 17-17 X ; out1: 367 X + - 185; OP: 185-191; line: 18-18 X ; out1: 367 X + - 192; OP: 192-198; line: 19-19 X ; out1: 367 X + - 199; OP: 199-205; line: 20-20 HIT; out1: 367 HIT + - 206; OP: 206-212; line: 21-21 X ; out1: 367 X + - 213; OP: 213-219; line: 22-22 X ; out1: 367 X + - 220; OP: 220-226; line: 23-23 X ; out1: 367 X + - 227; OP: 227-233; line: 24-24 X ; out1: 367 X + - 234; OP: 234-240; line: 25-25 X ; out1: 367 X + - 241; OP: 241-247; line: 26-26 HIT; out1: 367 HIT + - 248; OP: 248-254; line: 27-27 X ; out1: 367 X + - 255; OP: 255-261; line: 28-28 X ; out1: 367 X + - 262; OP: 262-268; line: 29-29 X ; out1: 367 X + - 269; OP: 269-275; line: 30-30 X ; out1: 367 X + - 276; OP: 276-282; line: 31-31 X ; out1: 367 X + - 283; OP: 283-289; line: 32-32 X ; out1: 367 X + - 290; OP: 290-296; line: 33-33 X ; out1: 367 X + - 297; OP: 297-303; line: 34-34 X ; out1: 367 X + - 304; OP: 304-310; line: 35-35 X ; out1: 367 X + - 311; OP: 311-317; line: 36-36 X ; out1: 367 X + - 318; OP: 318-324; line: 37-37 X ; out1: 367 X + - 325; OP: 325-331; line: 38-38 X ; out1: 367 X + - 332; OP: 332-338; line: 39-39 X ; out1: 367 X + - 339; OP: 339-345; line: 40-40 X ; out1: 367 X + - 346; OP: 346-352; line: 41-41 HIT; out1: 367 HIT + - 353; OP: 353-359; line: 42-42 X ; out1: 367 X + - 360; OP: 360-366; line: 43-43 X ; out1: 367 X + - 367; OP: 367-367; line: 43-43 HIT; out1: 02 HIT + - 368; OP: 368-369; line: 43-46 HIT; out1: EX X +- paths + - 0 2 3 87 367 2 368: X + - 0 2 3 94 367 2 368: X + - 0 2 3 101 367 2 368: X + - 0 2 3 108 367 2 368: X + - 0 2 3 115 367 2 368: X + - 0 2 3 122 367 2 368: X + - 0 2 3 129 367 2 368: X + - 0 2 3 136 367 2 368: X + - 0 2 3 143 367 2 368: X + - 0 2 3 150 367 2 368: X + - 0 2 3 157 367 2 368: X + - 0 2 3 164 367 2 368: X + - 0 2 3 171 367 2 368: X + - 0 2 3 178 367 2 368: X + - 0 2 3 185 367 2 368: X + - 0 2 3 192 367 2 368: X + - 0 2 3 199 367 2 368: X + - 0 2 3 206 367 2 368: X + - 0 2 3 213 367 2 368: X + - 0 2 3 220 367 2 368: X + - 0 2 3 227 367 2 368: X + - 0 2 3 234 367 2 368: X + - 0 2 3 241 367 2 368: X + - 0 2 3 248 367 2 368: X + - 0 2 3 255 367 2 368: X + - 0 2 3 262 367 2 368: X + - 0 2 3 269 367 2 368: X + - 0 2 3 276 367 2 368: X + - 0 2 3 283 367 2 368: X + - 0 2 3 290 367 2 368: X + - 0 2 3 297 367 2 368: X + - 0 2 3 304 367 2 368: X + - 0 2 3 311 367 2 368: X + - 0 2 3 318 367 2 368: X + - 0 2 3 325 367 2 368: X + - 0 2 3 332 367 2 368: X + - 0 2 3 339 367 2 368: X + - 0 2 3 346 367 2 368: X + - 0 2 3 353 367 2 368: X + - 0 2 3 360 367 2 368: X + - 0 2 3 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 360 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 353 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 346 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 339 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 332 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 325 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 318 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 311 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 304 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 297 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 290 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 283 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 276 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 269 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 262 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 255 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 248 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 241 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 234 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 227 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 220 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 213 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 206 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 199 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 192 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 185 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 32 178 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 30 171 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 28 164 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 26 157 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 24 150 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 22 143 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 20 136 367 2 368: X + - 0 2 3 6 8 10 12 14 16 18 129 367 2 368: X + - 0 2 3 6 8 10 12 14 16 122 367 2 368: X + - 0 2 3 6 8 10 12 14 115 367 2 368: X + - 0 2 3 6 8 10 12 108 367 2 368: X + - 0 2 3 6 8 10 101 367 2 368: X + - 0 2 3 6 8 94 367 2 368: X + - 0 2 3 6 87 367 2 368: X + - 0 2 368: X + - 0 368: X diff --git a/tests/bug01486-002-opcache.phpt b/tests/bug01486-002-opcache.phpt new file mode 100644 index 000000000..22d89f441 --- /dev/null +++ b/tests/bug01486-002-opcache.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test for bug #1486: Crash on ZEND_SWITCH_LONG / ZEND_SWITCH_STRING +--SKIPIF-- +=')) echo "skip >= PHP 7.2 needed\n"; +if (!extension_loaded('zend opcache')) echo "skip opcache required\n"; +?> +--FILE-- + +--EXPECTF-- +foo 3 +{main} +- branches + - 00; OP: 00-03; line: 02-03 HIT; out1: 14 X ; out2: 21 X ; out3: 28 HIT; out4: 35 X ; out5: 42 X ; out6: 48 X ; out7: 04 X + - 04; OP: 04-05; line: 04-04 X ; out1: 06 X ; out2: 14 X + - 06; OP: 06-07; line: 05-05 X ; out1: 08 X ; out2: 21 X + - 08; OP: 08-09; line: 06-06 X ; out1: 10 X ; out2: 28 X + - 10; OP: 10-11; line: 07-07 X ; out1: 12 X ; out2: 35 X + - 12; OP: 12-13; line: 08-08 X ; out1: 48 X ; out2: 42 X + - 14; OP: 14-20; line: 04-10 X ; out1: EX X + - 21; OP: 21-27; line: 05-10 X ; out1: EX X + - 28; OP: 28-34; line: 06-10 HIT; out1: EX X + - 35; OP: 35-41; line: 07-10 X ; out1: EX X + - 42; OP: 42-47; line: 08-10 X ; out1: 48 X + - 48; OP: 48-48; line: 10-10 X ; out1: EX X +- paths + - 0 14: X + - 0 21: X + - 0 28: HIT + - 0 35: X + - 0 42 48: X + - 0 48: X + - 0 4 6 8 10 12 48: X + - 0 4 6 8 10 12 42 48: X + - 0 4 6 8 10 35: X + - 0 4 6 8 28: X + - 0 4 6 21: X + - 0 4 14: X diff --git a/tests/bug01486-002.inc b/tests/bug01486-002.inc new file mode 100644 index 000000000..3f6df0b42 --- /dev/null +++ b/tests/bug01486-002.inc @@ -0,0 +1,9 @@ +=')) echo "skip >= PHP 7.2 needed\n"; +if (extension_loaded('zend opcache')) echo "skip opcache should not be loaded\n"; +?> +--FILE-- + +--EXPECTF-- +foo 3 +{main} +- branches + - 00; OP: 00-03; line: 02-03 HIT; out1: 15 X ; out2: 22 X ; out3: 29 HIT; out4: 36 X ; out5: 43 X ; out6: 50 X ; out7: 04 X + - 04; OP: 04-05; line: 04-04 X ; out1: 06 X ; out2: 15 X + - 06; OP: 06-07; line: 05-05 X ; out1: 08 X ; out2: 22 X + - 08; OP: 08-09; line: 06-06 X ; out1: 10 X ; out2: 29 X + - 10; OP: 10-11; line: 07-07 X ; out1: 12 X ; out2: 36 X + - 12; OP: 12-13; line: 08-08 X ; out1: 14 X ; out2: 43 X + - 14; OP: 14-14; line: 08-08 X ; out1: 50 X + - 15; OP: 15-21; line: 04-04 X ; out1: 50 X + - 22; OP: 22-28; line: 05-05 X ; out1: 50 X + - 29; OP: 29-35; line: 06-06 HIT; out1: 50 HIT + - 36; OP: 36-42; line: 07-07 X ; out1: 50 X + - 43; OP: 43-49; line: 08-08 X ; out1: 50 X + - 50; OP: 50-50; line: 10-10 HIT; out1: EX X +- paths + - 0 15 50: X + - 0 22 50: X + - 0 29 50: HIT + - 0 36 50: X + - 0 43 50: X + - 0 50: X + - 0 4 6 8 10 12 14 50: X + - 0 4 6 8 10 12 43 50: X + - 0 4 6 8 10 36 50: X + - 0 4 6 8 29 50: X + - 0 4 6 22 50: X + - 0 4 15 50: X diff --git a/xdebug_branch_info.h b/xdebug_branch_info.h index b9e8e2118..3620914c1 100644 --- a/xdebug_branch_info.h +++ b/xdebug_branch_info.h @@ -25,7 +25,7 @@ #define XDEBUG_JMP_NOT_SET (INT_MAX-1) #define XDEBUG_JMP_EXIT (INT_MAX-2) -#define XDEBUG_BRANCH_MAX_OUTS 32 +#define XDEBUG_BRANCH_MAX_OUTS 64 typedef struct _xdebug_branch { unsigned int start_lineno; diff --git a/xdebug_code_coverage.c b/xdebug_code_coverage.c index 0f36076cd..619421165 100644 --- a/xdebug_code_coverage.c +++ b/xdebug_code_coverage.c @@ -576,8 +576,10 @@ static int xdebug_find_jumps(zend_op_array *opa, unsigned int position, size_t * /* All 'case' statements */ ZEND_HASH_FOREACH_VAL_IND(myht, val) { - jumps[*jump_count] = position + (val->value.lval / sizeof(zend_op)); - (*jump_count)++; + if (*jump_count < XDEBUG_BRANCH_MAX_OUTS - 2) { + jumps[*jump_count] = position + (val->value.lval / sizeof(zend_op)); + (*jump_count)++; + } } ZEND_HASH_FOREACH_END(); /* The 'default' case */