mboost-dp1

php
- Forside
- ⟨
- Forum
- ⟨
- Nyheder
Øhh "32-bit x87", hvad med bare x86 ;)
Og det er da heller ikke alle store decimaltal, men lige netop kun et par store decimaltal.
Edit: lidt for langsom ang 32bit delen.
men her kommer lidt mere "guf":
Og det er da heller ikke alle store decimaltal, men lige netop kun et par store decimaltal.
Edit: lidt for langsom ang 32bit delen.
men her kommer lidt mere "guf":
What’s Special About 2.2250738585072011e-308?Kilde: http://www.exploringbinary.com/php-hangs-on-numeri...
2.2250738585072011e-308 represents the largest subnormal double-precision floating-point number; written as a hexadecimal floating-point constant, it’s 0x0.fffffffffffffp-1022. 2.2250738585072011e-308 is one of five 17-digit decimal values that convert (correctly) to 0x0.fffffffffffffp-1022:
* 2.2250738585072007e-308
* 2.2250738585072008e-308
* 2.2250738585072009e-308
* 2.2250738585072010e-308
* 2.2250738585072011e-308
Only 2.2250738585072011e-308 causes the problem. It happens to be the largest of the five decimal values, so I guess that matters somehow.
Personer med onde hensigter har dermed mulighed for at nedlægge PHP-servere ved at indsætte dette tal i PHP's GET-funktion.
Hvor står det henne?
Indtil PHP koden gør noget, så betragtes værdier i query streng vel som strenge.
Der er en kommentar i kilden:
This is *really* serious. In fact, I’ve just tested if the problem happens for GET passed values and it does. Not all the passed data to a website is treated as a number, so not all websites with the PHP versions and configuration that could fail with this bug will be vulnerable, but definitely there is going to be a huge amount of websites that will do. This is really scaring.
I hope the PHP team patch it soon.
Meanwhile, a possible workaround would be adding this line at the very top of the execution of php website:
if (strpos(str_replace(‘.’, ”, serialize($GLOBALS)), ’22250738585072011′)!==false) die();
Men jeg synes ikke at det er klart hvad de mener.
Emil (4) skrev:Jeg har nu søgt en række kilder igennem, og de angiver alle, at der skulle være tale om x87.
Nej.
Der står at det er x87 instruktions sættet.
I gamle dage var der en x87 coprocessor som understøttede det.
men siden 486 (ekskl. 486SX) har det instruktionsæt været en del af x86 processorer.
http://news.ycombinator.com/item?id=2066352 skrev:Follow-up: PROBLEM SOLVED.
This problem occurs due to IA-32's 80-bit floating point arithmetic. The simple fix: add a "-ffloat-store" flag to your CFLAGS.
The problematic function, zend_strtod, seems to parse the mantissa (2.225...011 part) and the exponent (-308 part) separately, calculate the approximation of m*10^e and successively improve that approximation until the error becomes less than 0.5ulp. The problem is that this particular number causes the infinite loop (i.e. the iteration does not improve the error at all) in 80-bit FP, but does not in 64-bit FP. Since x86-64 in general uses the SSE2 instruction set (with 64-bit FP) instead of the deprecated x87 it does not have this problem.
Tjaaaah... jeg har seriøst, uden flamebait, aldrig forstået folk gider bruge PHP.
Og folk kalder det OOP... så længe det ikke er typestærkt er det i min optik ikke OOP og dermed forbliver OOP et scriptingsprog der skal kompilleres igen og igen og igen for hvert besøg.
Jeg faldt over http://maurus.net/resources/programming-languages/... - ganske morsom - fx med if/boolean-konstruktionerne. Ganske morsomt at
Og folk kalder det OOP... så længe det ikke er typestærkt er det i min optik ikke OOP og dermed forbliver OOP et scriptingsprog der skal kompilleres igen og igen og igen for hvert besøg.
Jeg faldt over http://maurus.net/resources/programming-languages/... - ganske morsom - fx med if/boolean-konstruktionerne. Ganske morsomt at
if ("false" == 0) echo "true\n";// => true, wtf
#12
Med hensyn til eksemplet. Alle sprog har deres regler for sproget. Ovenstående virker ulogisk for folk med baggrund i andre sprog, men det er ikke usædvaneligt at folk som kender sprog X finder sprog Y mystisk.
C++:
ville måske også forundre nogen (der ikke kender C og C++).
Med hensyn til eksemplet. Alle sprog har deres regler for sproget. Ovenstående virker ulogisk for folk med baggrund i andre sprog, men det er ikke usædvaneligt at folk som kender sprog X finder sprog Y mystisk.
C++:
cout << (false == 0) << endl;
ville måske også forundre nogen (der ikke kender C og C++).
Kian (12) skrev:Tjaaaah... jeg har seriøst, uden flamebait, aldrig forstået folk gider bruge PHP.
Og folk kalder det OOP... så længe det ikke er typestærkt er det i min optik ikke OOP og dermed forbliver OOP et scriptingsprog der skal kompilleres igen og igen og igen for hvert besøg.
...
Ja, arne_v siger det bedst selv, men du burde nu ansøge om at få dine skolepenge tilbage.
Alting er et eller andet sted objektorienteret. Ja, din MOR er objektorienteret. Og man kan jo ikke just kalde hendes transaktionssystem "letvægts".
Arkimedes (15) skrev:Kian (12) skrev:Tjaaaah... jeg har seriøst, uden flamebait, aldrig forstået folk gider bruge PHP.
Og folk kalder det OOP... så længe det ikke er typestærkt er det i min optik ikke OOP og dermed forbliver OOP et scriptingsprog der skal kompilleres igen og igen og igen for hvert besøg.
...
Ja, arne_v siger det bedst selv, men du burde nu ansøge om at få dine skolepenge tilbage.
Alting er et eller andet sted objektorienteret. Ja, din MOR er objektorienteret. Og man kan jo ikke just kalde hendes transaktionssystem "letvægts".
Du har helt ret. Man skal aldrig diskutere med en filosof.
arne_v (6) skrev:Nej.
Der står at det er x87 instruktions sættet.
I gamle dage var der en x87 coprocessor som understøttede det.
men siden 486 (ekskl. 486SX) har det instruktionsæt været en del af x86 processorer.
Og? Det nærmer sig jo ordkløveri :-p. Fejlen opstår i visse tilfælde hvis man ikke optimerer til nyere CPUer, og får genereret iøvrigt forældede x87-instruktioner. Så det er da rimelig relevant at det er x87, om dens instruktioner så ellers er en del af CPUen eller ligger eksternt.
Kian (12) skrev:Jeg faldt over http://maurus.net/resources/programming-languages/... - ganske morsom - fx med if/boolean-konstruktionerne. Ganske morsomt atif ("false" == 0) echo "true\n";// => true, wtf
Hvorfor er det specielt morsomt? Der bliver sammenlignet en streng med et tal, hvilket er en fejl fra udviklerens side. For at gøre bod på hans fejl, prøves der at få mening ud af sætningen ved at omforme strengen til et tal, hvorved "false" som værende boolean naturligt giver 0 som tal.
Kian (12) skrev:Tjaaaah... jeg har seriøst, uden flamebait, aldrig forstået folk gider bruge PHP.
Og folk kalder det OOP... så længe det ikke er typestærkt er det i min optik ikke OOP og dermed forbliver OOP et scriptingsprog der skal kompilleres igen og igen og igen for hvert besøg.
Jeg faldt over http://maurus.net/resources/programming-languages/... - ganske morsom - fx med if/boolean-konstruktionerne. Ganske morsomt atif ("false" == 0) echo "true\n";// => true, wtf
Hvis du vidste bare en smule om PHP så ville du også vide at der er === equal operatoren hvis du SKAL have en typestrict sammenligning..
Desuden er mange af bloggerens argumenter ikke aktuelle idag, såfremt du kører med den nyeste version af PHP5.. Men ja, PHP har sku sine fejl og mangler..
PS. Sjovt at denne blogger kan bashe PHP, og så bruge det selv på sin blog, selvmål imo.
Og hvad fanden har strict/loose type med OOP at gøre? Er javascript så heller ikke OOP eller hvad?
arne_v (25) skrev:#24
Det er dybt mystisk for en Fortran/Pascal/C/C++/Java/C# udvikler.
Men for en PHP udvikler er det naturligt. Maaske vil en VB udvikler ogsaa finde det mindre overraskende.
Mne forskellige sprog har forskellige filosofier.
Med ordet "mystisk" formoder jeg, at der menes "forkert", trods de to ord er meget forskellige.
Nu har jeg ganske vist mest erfaring med PHP, men som en ganske habil udvikler i C# og VB finder jeg det ikke forkert, at PHP ikke er "strict type", som de fleste andre sprog. Jeg synes, der er ting, der både taler for og imod det.
Men man kan nok ikke finde de positive ting i sproget, hvis man ikke har roddet lidt mere intenst med det bag overfladen.
arne_v (29) skrev:Nej jeg mener faktisk mystisk sådan i betydningen "WTF er det her for noget".
Forstod du ikke min forklaring? Såfremt du gjorde, så er der nu tale om, at du synes, det er forkert, frem for at det er mystisk, som i at du slet ikke forestår hvorfor det sker.
cronick (30) skrev:Forstod du ikke min forklaring? Såfremt du gjorde, så er der nu tale om, at du synes, det er forkert, frem for at det er mystisk, som i at du slet ikke forestår hvorfor det sker.
Du flueknepper og ligger ord i arne_v's mund. Ydermere river du en gammel tråd frem uden at bidrage med ngoet af betydning. Hold op med det.
Hm. Jeg må tilsyneladende have udtalt mig en smule tvetydigt.
Jeg er nu ikke ude på, at lægge ord i nogens mund. Jeg konstaterer blot, at der ikke kan være tale om, at noget er mystisk, hvis man har forståelse for dets koncept. Og SÅFREMT du har forstået essensen af hvorfor den omtalte kode gør, som den gør, må du finde et andet udtryk til at forklare din opfattelse af det - hvor ordet 'forkert' falder mest nærliggende, skulle du være negativ stemt overfor det faktum, at den gør det.
Jeg er nu ikke ude på, at lægge ord i nogens mund. Jeg konstaterer blot, at der ikke kan være tale om, at noget er mystisk, hvis man har forståelse for dets koncept. Og SÅFREMT du har forstået essensen af hvorfor den omtalte kode gør, som den gør, må du finde et andet udtryk til at forklare din opfattelse af det - hvor ordet 'forkert' falder mest nærliggende, skulle du være negativ stemt overfor det faktum, at den gør det.
cronick (33) skrev:Jeg konstaterer blot, at der ikke kan være tale om, at noget er mystisk, hvis man har forståelse for dets koncept.
Nej, men det er jo lige præcis hvad de ikke har.
"WTF er det her for noget" betyder jo netop at de ikke har forstået konceptet.
cronick (33) skrev:Og SÅFREMT du har forstået essensen af hvorfor den omtalte kode gør, som den gør, må du finde et andet udtryk til at forklare din opfattelse af det
????
Når jeg skriver "Det er dybt mystisk for en Fortran/Pascal/C/C++/Java/C# udvikler." så taler jeg faktisk ikke om mig og ikke om min opfattelse.
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.