ID:               39415
 Updated by:       [EMAIL PROTECTED]
 Reported By:      jordi at telematictraining dot com
-Status:           Open
+Status:           Bogus
-Bug Type:         Compile Failure
+Bug Type:         PCRE related
 Operating System: Debian GNU/Linux Stable
 PHP Version:      5.2.0
 New Comment:

This is a limitation of PCRE library, not PHP.


Previous Comments:
------------------------------------------------------------------------

[2006-11-08 09:52:08] jordi at telematictraining dot com

Sorry for not posting the script, here you are:

#!/usr/local/bin/php

<?php

/* Bug on the PHP 5.2.0 preg_Match_all() function? */

$pattern =
"/((field):(codigo_doa|titulo_obra|titulo_alternativo|num_serie|ejemplar_serie|ejemplares_obra|nombre_tecnica|materiales_soporte|medidas_diametro|lista_artistas|medidas_peso|medidas_resolucion|epoca_corriente|medidas_minutaje|color|sonido_canales|numero_normalizado|valor|fecha_creacion|medidas_longitud|es_firmado|exactitud_fecha|tipo_obra|tipologia_objeto|tipo_tecnica|unidades_medidas|unidades_peso|tipo_formato|nombre_formato_imagen|arquitectura|hay_sonido|sonido_nombre_formato|sonido_muestreo|sonido_amplitud|sonido_idioma_original|pais_publicacion))|((barcode):((\_[ABC]){0,1}(\((\d+)\)){0,1}(\{(codigo_doa|titulo_obra|titulo_alternativo|num_serie|ejemplar_serie|ejemplares_obra|nombre_tecnica|materiales_soporte|medidas_diametro|lista_artistas|medidas_peso|medidas_resolucion|epoca_corriente|medidas_minutaje|color|sonido_canales|numero_normalizado|valor|fecha_creacion|medidas_longitud|es_firmado|exactitud_fecha|tipo_obra|tipologia_objeto|tipo_tecnica|unidades_medidas|unidades_pe
so|tipo_formato|nombre_formato_imagen|arquitectura|hay_sonido|sonido_nombre_formato|sonido_muestreo|sonido_amplitud|sonido_idioma_original|pais_publicacion)\}){1,45}))/";

$subject = "<table width=\"100%\"> <tr> <td class=\"field_label\">Tipo
de objeto / Type of object: </td> <td
class=\"field\">field:tipologia_objeto (field:tipo_obra)</td> </tr>
<tr> <td class=\"field_label\">Objeto de arte registrado en AICOA /
Work of art registered in AICOA: </td> <td
class=\"field\">field:codigo_doa</td> </tr> <tr> <td
class=\"field_label\">Título de la obra (Título alternativo) / Title
(Alternative title): </td> <td class=\"field\">field:titulo_obra
(field:titulo_alternativo)</td> </tr> <tr> <td
class=\"field_label\">Autor / Author: </td> <td
class=\"field\">field:lista_artistas</td> </tr> <tr> <td
class=\"field_label\">Fecha realización / Date or period: </td> <td
class=\"field\">field:fecha_creacion (field:exactitud_fecha)</td> </tr>
<tr> <td class=\"field_label\">Escuela, corriente estilística / School,
art movement: </td> <td class=\"field\">field:epoca_corriente</td>
</tr> <tr> <td class=\"field_label\">Datos de la serie / Serial Number:
</td> <td class=\"field\">field:ejemplar_serie / field:ejemplares_obra
-- serie: field:num_serie</td> </tr> <tr> <td
class=\"field_label\">Características del formato / Format
characteristics: </td> <td class=\"field\">field:tipo_tecnica ,
resolución: field:medidas_resolucion</td> </tr> <tr> <td
class=\"field_label\">Técnica / Technique:</td> <td
class=\"field\">field:nombre_tecnica</td> </tr> <tr> <td
class=\"field_label\">Materiales-Soporte / Material-Support:</td> <td
class=\"field\">field:materiales_soporte</td> </tr> <tr> <td
class=\"field_label\">Medidas / dimensions:</td> <td class=\"field\">
field:medidas_longitud field:unidades_medidas // Ø
field:medidas_diametro field:unidades_medidas // field:medidas_peso
field:unidades_peso </td> </tr> <tr> <td class=\"field_label\">Firmado
/ Signed</td> <td class=\"field\">field:es_firmado</td> </tr>
</table>";

if(preg_match_all($pattern, $subject, $coincidences))
   print_r($coincidences);

?>

------------------------------------------------------------------------

[2006-11-07 16:47:48] jordi at telematictraining dot com

The content of $pattern was line-altered (line breaks where they
shouldn't), so here's the correct one:

$pattern="/((field):(codigo_doa|titulo_obra|titulo_alternativo|num_serie|ejemplar_serie|ejemplares_obra|nombre_tecnica|materiales_soporte|medidas_diametro|lista_artistas|medidas_peso|medidas_resolucion|epoca_corriente|medidas_minutaje|color|sonido_canales|numero_normalizado|valor|fecha_creacion|medidas_longitud|es_firmado|exactitud_fecha|tipo_obra|tipologia_objeto|tipo_tecnica|unidades_medidas|unidades_peso|tipo_formato|nombre_formato_imagen|arquitectura|hay_sonido|sonido_nombre_formato|sonido_muestreo|sonido_amplitud|sonido_idioma_original|pais_publicacion))|((barcode):((\_[ABC]){0,1}(\((\d+)\)){0,1}(\{(codigo_doa|titulo_obra|titulo_alternativo|num_serie|ejemplar_serie|ejemplares_obra|nombre_tecnica|materiales_soporte|medidas_diametro|lista_artistas|medidas_peso|medidas_resolucion|epoca_corriente|medidas_minutaje|color|sonido_canales|numero_normalizado|valor|fecha_creacion|medidas_longitud|es_firmado|exactitud_fecha|tipo_obra|tipologia_objeto|tipo_tecnica|unidades_medidas|u!
 nidades_pe
so|tipo_formato|nombre_formato_imagen|arquitectura|hay_sonido|sonido_nombre_formato|sonido_muestreo|sonido_amplitud|sonido_idioma_original|pais_publicacion)\}){1,45}))/"

------------------------------------------------------------------------

[2006-11-07 16:45:40] jordi at telematictraining dot com

Description:
------------
Hi there,

What we did? Update php 5.1.6 to 5.2.0.
What we wanted to happen? We expected the 5.2.0 version to behave/work
as the previous ones (5.1.2, 5.1.4 and 5.1.6).
What actualy happened? It didn't.

We have a php based app and we've been working since php version 5.1.2.
But with this new version (5.2.0) it seems to be a problem with the
preg_match_all() function.

Being the function call preg_match_all(string $pattern, string
$subject, array $coincidences), this are the values of the variables:

$pattern =
"/((field):(codigo_doa|titulo_obra|titulo_alternativo|num_serie|ejemplar_serie|ej
emplares_obra|nombre_tecnica|materiales_soporte|medidas_diametro|lista_artistas|m
edidas_peso|medidas_resolucion|epoca_corriente|medidas_minutaje|color|sonido_cana
les|numero_normalizado|valor|fecha_creacion|medidas_longitud|es_firmado|exactitud
_fecha|tipo_obra|tipologia_objeto|tipo_tecnica|unidades_medidas|unidades_peso|tip
o_formato|nombre_formato_imagen|arquitectura|hay_sonido|sonido_nombre_formato|son
ido_muestreo|sonido_amplitud|sonido_idioma_original|pais_publicacion))|((barcode)
:((\_[ABC]){0,1}(\((\d+)\)){0,1}(\{(codigo_doa|titulo_obra|titulo_alternativo|num
_serie|ejemplar_serie|ejemplares_obra|nombre_tecnica|materiales_soporte|medidas_d
iametro|lista_artistas|medidas_peso|medidas_resolucion|epoca_corriente|medidas_mi
nutaje|color|sonido_canales|numero_normalizado|valor|fecha_creacion|medidas_longi
tud|es_firmado|exactitud_fecha|tipo_obra|tipologia_objeto|tipo_tecnica|unidades_m
edidas|unidades_peso|tipo_formato|nombre_formato_imagen|arquitectura|hay_sonido|sonido_nombre_forma
to|sonido_muestreo|sonido_amplitud|sonido_idioma_original|pais_publicacion)\}){1,
45}))/";

$subject = "<table width="100%"> <tr> <td class="field_label">Tipo de
objeto / Type of object: </td> <td class="field">field:tipologia_objeto
(field:tipo_obra)</td> </tr> <tr> <td class="field_label">Objeto de arte
registrado en AICOA / Work of art registered in AICOA: </td> <td
class="field">field:codigo_doa</td> </tr> <tr> <td
class="field_label">Título de la obra (Título alternativo) / Title
(Alternative title): </td> <td class="field">field:titulo_obra
(field:titulo_alternativo)</td> </tr> <tr> <td
class="field_label">Autor / Author: </td> <td
class="field">field:lista_artistas</td> </tr> <tr> <td
class="field_label">Fecha realización / Date or period: </td> <td
class="field">field:fecha_creacion (field:exactitud_fecha)</td> </tr>
<tr> <td class="field_label">Escuela, corriente estilística / School,
art movement: </td> <td class="field">field:epoca_corriente</td> </tr>
<tr> <td class="field_label">Datos de la serie / Serial Number: </td>
<td class="field">field:ejemplar_serie / field:ejemplares_obra --
serie: field:num_serie</td> </tr> <tr> <td
class="field_label">Características del formato / Format
characteristics: </td> <td class="field">field:tipo_tecnica ,
resolución: field:medidas_resolucion</td> </tr> <tr> <td
class="field_label">Técnica / Technique:</td> <td
class="field">field:nombre_tecnica</td> </tr> <tr> <td
class="field_label">Materiales-Soporte / Material-Support:</td> <td
class="field">field:materiales_soporte</td> </tr> <tr> <td
class="field_label">Medidas / dimensions:</td> <td class="field">
field:medidas_longitud field:unidades_medidas // Ø
field:medidas_diametro field:unidades_medidas // field:medidas_peso
field:unidades_peso </td> </tr> <tr> <td class="field_label">Firmado /
Signed</td> <td class="field">field:es_firmado</td> </tr> </table>"

The function breaks down giving this message:

Warning: preg_match_all() [function.preg-match-all]: Compilation
failed: repeated subpattern is too long at offset 1153 in
/home/.../dcombs_controller.php on line 723

Warning: preg_match_all() [function.preg-match-all]: Compilation
failed: repeated subpattern is too long at offset 1153 in
/home/.../dcombs_controller.php on line 723

We don't know if this is a bug, but we haven't seen any change related
to this on the 5.2.0 changelog. Just in case this could be a variable
size limitation (of 1024?), the $pattern is 1158 characters long and
the $subject is 1738 charachers.


Reproduce code:
---------------
See description.

Configure line: ./configure --prefix=/usr/local
--with-config-file-path=/usr/local/etc --with-apxs2=/usr/bin/apxs2
--with-mod_charset --with-openssl --with-kerberos --with-zlib
--enable-bcmath --with-bz2 --enable-calendar --with-curl
--with-curlwrappers --with-gd --with-ttf --enable-gd-native-ttf
--with-gettext --with-mcrypt --with-mysql --with-mysqli --with-snmp
--enable-wddx-with-xmlrpc --with-xsl --enable-sysvmsg --enable-sysvsem
--enable-sysvshm --with-freetype-dir --with-xml --with-libxml
--with-expat-dir --with-xmlrpc --enable-soap --enable-mbstring
--enable-mbstr-enc-trans --with-pgsql --with-tidy

Other configure options are removing --with-tidy.


Expected result:
----------------
The the preg_match_all() to work as it did on all 5.x php versions
until the date (except for 5.2.0).

Actual result:
--------------
Warning: preg_match_all() [function.preg-match-all]: Compilation
failed: repeated subpattern is too long at offset 1153 in
/home/.../dcombs_controller.php on line 723

Warning: preg_match_all() [function.preg-match-all]: Compilation
failed: repeated subpattern is too long at offset 1153 in
/home/.../dcombs_controller.php on line 723


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=39415&edit=1

Reply via email to