#26363 [Opn->Bgs]: preg_replace() crashes PHP

From: Date: Mon, 24 Nov 2003 16:28:45 +0000
Subject: #26363 [Opn->Bgs]: preg_replace() crashes PHP
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-50924@lists.php.net to get a copy of this message
ID: 26363 User updated by: prof_moriarty at veryfast dot biz Reported By: prof_moriarty at veryfast dot biz -Status: Open +Status: Bogus Bug Type: Regexps related Operating System: win 98SE PHP Version: 4.3.4 New Comment: Typo in last post. read 4.3.2 in place of 3.4.2... I've just done some more testing of this, and it's now working?!?!?!??! Which has made me REALLY baffled I had two scripts that wouldn't work under 4.3.4. I narrowed it down to that line of code in one of them (the other was 2000 lines and would have taken days to debug :) ) Anyhow, both scripts now work. As does my 3 line test script which invariably crashed yesterday. I havn't altered my installation of PHP, apache, or mysql since yesterday!!! This is really, REALLY weird... Untill this happens again, i'll give this bug a 'bogus' rating. But i'd suggest someone look into it. Previous Comments: ------------------------------------------------------------------------ [2003-11-24 11:22:30] prof_moriarty at veryfast dot biz But the regexp DOES work with 3.4.2!!! And earier version too. What the regexp ("/\|\| $/") does is: \|\| = looking for || " " = looking for space $ = the above must be at the end of the string No piping or anything else required there. And the string it's replacing is something more like: $del_str .= "ship_id = '17' || "; (with an extra space at the end (typo my missing it out on the original post)). That'd be why you thought it wouldn't work. Sorry. ;) ------------------------------------------------------------------------ [2003-11-23 21:15:49] sniper@php.net Does not crash with linux. ------------------------------------------------------------------------ [2003-11-23 13:29:03] scottm at spamcop dot net Your regex wont work. Your trying to match || followed by a space at the end of the string. Where you have space then the double pipes in $string. Using ------ $string = "ship_id = '17' ||"; $string = preg_replace("/ \|\|$/", "", $string); echo $string; I get no ship_id = '17' as exepcted ------------------------------------------------------------------------ [2003-11-23 09:25:57] prof_moriarty at veryfast dot biz Description: ------------ There seem to be some major issues with preg_replace in this version. See code actual and reproducable for explanations Reproduce code: --------------- $string = "ship_id = '17' ||"; $string = preg_replace("/\|\| $/", "", $string); echo $string; Expected result: ---------------- SHOULD result in ship_id = '17' being printed to the screen. Actual result: -------------- PHP crashes. Indeed it would seem absolutely anything i enter as either the regexp, or the string will crash it. Even if both are blank. Below is the 'details' of the error (as gained from windows thing): " PHP caused an invalid page fault in module <unknown> at 0000:854fd78b. Registers: EAX=0000004c CS=016f EIP=854fd78b EFLGS=00010246 EBX=0063f474 SS=0177 ESP=0063f330 EBP=10135328 ECX=00000000 DS=0177 ESI=0000004c FS=96a7 EDX=0000008a ES=0177 EDI=007d68cc GS=0000 Bytes at CS:EIP: 00 2e 00 05 00 2e 00 05 00 2e 00 05 00 2e 00 05 Stack dump: 011750f4 ffffffff 10135328 10135328 01010101 01010101 01010101 00100101 0000004c 00100010 01820010 00000000 00000000 0102014c 01020102 01020102 " ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=26363&edit=1

« previous php.bugs (#50924) next »