« Manicura con gatoY otro gato... »

PHP: preg_match Segmentation Fault

<?php

Curiosidades de la vida, que jugando con unos preg_match de lo más "inocentes" me he dado de lleno contra un muro infranqueable. Por lo visto el preg_match, y todas las regexp "a lo perl" de php, tienen un problema de saturación de pila por exceso de reentradas en patrones de búsqueda "complejos".

Lo divertido, por llamarlo de alguna forma, es que a simple vista, y hasta con tests básicos, no dan ningún problema... hasta que les llegan más datos de los debidos, en una función a demasiada profundidad, y les da por matar todo el script con un descriptivo Segmentation fault.

Un ejemplo simple podría ser algo como:

preg_match_all( '/(?:(?!<).)*<table>('. '<tr>(<td>((?!</td>).)*</td>)*</tr>'. '(?:(?!<tr>).)*'. ')*' ,$in,$out);

A primera vista podría parecer "algo" enrevesado, pero en principio uno diría que no debería dar (demasiados) problemas. Y claro, no los da, al menos en las pruebas. Lo interesante empieza cuando el script de repente se pone a fallar cuando le da la gana, unas veces aquí, otras allí, unas antes, otras después...

Vamos, que por muy bonito que sea tirar de regexp con sintaxis perl, la verdad es que php no está demasiado preparado para tanta filigrana. Al final acaba siendo más rápido montarse un parser entero usando sólo las nativas ereg, aún a pesar de que su sintaxis sea... digamos... "algo cutre".

Trackback address for this post

This is a captcha-picture. It is used to prevent mass-access by robots.
Please enter the characters from the image above. (case insensitive)

No feedback yet

Deja un comentario


Your email address will not be revealed on this site.

Your URL will be displayed.
(Line breaks become <br />)
(Name, email & website)
(Allow users to contact you through a message form (your email will not be revealed.)

¿Cuántos GATOS hay en la foto?

(si fallas, puedes volver a intentarlo... al menos por ahora)

Jaroslaw Filiochowski
jar<QUIT@ESTO>fil@gmail.com
(e-mail, jabber, gtalk)
Desde: Bilbao, España

Enero 2009
Lun Mar Mié Jue Vie Sáb Dom
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Ordenar por:

Yo NO veo TV

Yo NO veo TV
00 horas de TV a la semana
image

powered by

powered by b2evolution free blog software

+

Gentoo
Gentoo


photos powered by

Foto de una cámara de fotos difital Nikon Coolpix 7600
Nikon Coolpix 7600

+

Foto de un móvil Nokia 3650 con logo personalizado
Nokia 3650

Por cortesía de NokiaGame 2002


Creative Commons License
Esta obra está bajo una licencia Creative Commons salvo donde se especifique explícitamente otra licencia.


IBSN: 3-3718-9164-1