WDDX bug PHP 5.2.2?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Helza
  • Registratie: Maart 2003
  • Laatst online: 11-09 16:01
Hi all,

Ik heb loop tegen een WDDX deserialize bug in PHP 5.2.1 op.
Als ik een array serialize & deserialize met array keys zoals 1.0 of 1.1 worden tijdens het deserializen vernaggeld naar 1

Ik heb hier alleen een PHP 5.2.1 bak staan, kan iemand testen of dit ook op PHP 5.2.2 of hoger voorkomt?

Dit werkte allemaal correct in PHP 4 :(

Hierbij de code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$data = array(
  'somearray' => array('1.1' => 'One 1','1.2' => 'One 2')
);

echo "<pre>Should be:\n";
var_dump(array('data'=>$data));
echo '</pre>';

echo "<pre>Is:\n";
var_dump(wddx_deserialize(wddx_serialize_vars('data')));
echo '</pre>';


?>

[ Voor 3% gewijzigd door een moderator op 04-05-2007 15:39 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom upgrade je zelf niet om het te testen?

Verder: op de manualpagina staat een custom functie die precies doet wat wddx_unserialize doet, die zou je ook kunnen gebruiken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Helza
  • Registratie: Maart 2003
  • Laatst online: 11-09 16:01
Teveel programmeurs op een development omgeving een geen rechten (of kennis) om zelf de upgrade te doen.

Die functie die beschreven staat gebruik ik nu ook (met een kleine aanpassing om ook latin1 output te genereren als ik dat wil). Maar dit is een bug in PHP 5.2.1 en misschien hoger. Daar zou je geen custom functies voor hoeven te gebruiken.
Ik kan geen bug indienen bij PHP als dit niet ook in PHP 5.2.2 of hoger zit.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Natuurlijk kun je die bug wel indienen. Als vervolgens blijkt dat die bug gefixt is in 5.2.2, dan zullen ze je dat toch wel zeggen? :) Het is sowieso in dat geval hun eigen fout dat ze dit soort dingen niet duidelijk maken op de manualpagina's die bij de functies horen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Helza
  • Registratie: Maart 2003
  • Laatst online: 11-09 16:01
Bij de bug submit pagina staat:
PHP version:
5.2.2
4.4.7
(+aantal CVS versies)
Irrelevant
Earlier? upgrade ..

dus het mag niet :)

Acties:
  • 0 Henk 'm!

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 18-09 20:05
Ik heb php 5.2.2 en de volgende output van jouw code:

Should be:
array(1) {
  ["data"]=>
  array(1) {
    ["somearray"]=>
    array(2) {
      ["1.1"]=>
      string(5) "One 1"
      ["1.2"]=>
      string(5) "One 2"
    }
  }
}

Is:
array(1) {
  ["data"]=>
  array(1) {
    ["somearray"]=>
    array(1) {
      [1]=>
      string(5) "One 2"
    }
  }
}

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


Acties:
  • 0 Henk 'm!

Verwijderd

Geen enkele ervaring met wddx (en erg weinig met php), maar maak van die '1.1' en '1.2' eens '1,1' en '1,2'?
Zou een regional settings / culture probleem kunnen zijn...

Acties:
  • 0 Henk 'm!

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 18-09 20:05
Dat lost inderdaad het probleem op. Maar het zou opzich niet uit moeten maken. Het zou ook gewoon als een string behandeld moeten worden lijkt me.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


Acties:
  • 0 Henk 'm!

  • Helza
  • Registratie: Maart 2003
  • Laatst online: 11-09 16:01
Yep, het zou hetzelfde resultaat moeten geven.
Bedankt voor de hulp, hopelijk fixen ze het snel :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

paulh schreef op vrijdag 04 mei 2007 @ 16:30:
Dat lost inderdaad het probleem op. Maar het zou opzich niet uit moeten maken. Het zou ook gewoon als een string behandeld moeten worden lijkt me.
Niet in PHP. De stiekeme conversies die PHP onder water doet zorgen dat "1.1" gezien wordt als een float in plaats van als een string. Ik vermoed dat "1,1" werkt omdat dat niet als float gezien wordt, en niet omdat er een locale-kwestie speelt, maar in beide gevallen lost het het probleem wel op. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

paulh schreef op vrijdag 04 mei 2007 @ 16:30:
Dat lost inderdaad het probleem op. Maar het zou opzich niet uit moeten maken. Het zou ook gewoon als een string behandeld moeten worden lijkt me.
Just curious, maar post de uitkomst met komma's i.p.v. punten 's?
In je eerste resultaat zie je dat ["1.1"] (string) wordt gedeserialized naar [1] (integer). Wordt 't in het 2e geval gedeserialized naar een double/float of naar een string? Oftewel, staan er double quotes omheen?

Zo nee, dan is 't ws echt een culture bug, zo ja, dan is 't een tekortkoming van PHP's weak typing systeem i.c.m. de arrogantie van amerikanen die per definitie een punt als decimal separator hanteren.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Nou, dit is zeker geen culture bug. Standaard wordt intern gewoon met de punt notatie gewerkt. Het afdrukken met een komma is iets dat enkel daar gebeurt, bij het afdrukken. Anders krijg je van die ranzige MSOffice praktijken waarbij een csv indeling in NL ineens met ; werkt ipv , (of nog erger... GEM ipv AVG ed)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Janoz, 't zou leuk zijn als je dit hard kunt maken. Als intern een punt gebruikt wordt, waarom worden dan in het voorbeeld van TS zowel ["1.1"] als ["1.2"] geinterpreteerd als [1]?
Komt op mij over dat PHP/WDDX zich hier verslikt in de ingestelde decimal separator...
Pagina: 1