abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:55 | Nová verze

    Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    včera 17:33 | Nová verze

    Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.

    Ladislav Hagara | Komentářů: 5
    včera 17:11 | Komunita

    Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.

    Ladislav Hagara | Komentářů: 2
    včera 12:55 | Nová verze

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 11:22 | Zajímavý článek

    David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …

    Ladislav Hagara | Komentářů: 5
    30.5. 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    30.5. 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:44 | Pozvánky

    V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:22 | Nová verze

    Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 9
    29.5. 22:11 | Nová verze

    Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.

    Ladislav Hagara | Komentářů: 7
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (90%)
     (3%)
     (4%)
     (4%)
    Celkem 1055 hlasů
     Komentářů: 17, poslední včera 15:31
    Rozcestník

    Bezpečnostní chyba CVE-2020-7071 v PHP

    PHP bylo vydáno ve verzích 8.0.1, 7.4.14 a 7.3.26. Řešena je bezpečnostní chyba CVE-2020-7071 (#77423) ve funkci parse_url().

    8.1.2021 07:00 | Ladislav Hagara | Bezpečnostní upozornění


    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    8.1.2021 09:43 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Dobrá reklama na Debian - řešena je bezpečnostní chyba, odkaz na jejich tracker, všechno vulnerable :-)
    Quando omni flunkus moritati
    8.1.2021 12:44 Pavel
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Nebyl vždy security team Debianu známý postojem PHP itself is a vulnerability?
    9.1.2021 09:27 Ptr
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    To sice ano, ale je to jedno z mála míst, kde je u toho CVE napsáno více než ** RESERVED ** nebo NOT FOUND :-D
    8.1.2021 16:16 Luděk Postrašil (SEO UX Experts s.r.o.)
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    ve verzích 8.0.1, 7.4.14 a 7.3.26
    Kdo chce kam, pomozme mu tam. Když musí mít někdo všechno co nejnovější, takto pak takhle dopadá.

    My naštěstí jedeme na dobře vyzkoušeném a odladěném PHP 5.
    9.1.2021 08:07 billgates | skóre: 27
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Presne. Nastastie este prakticky nikto nepremigroval na tieto hipsterske posrate nefunkncne verzie a vsetci idu na php5.
    Bedňa avatar 9.1.2021 13:38 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    PHP5 (a staršie) idú pretože sú programátori prasata.
    KERNEL ULTRAS video channel >>>
    9.1.2021 09:50 rpajik | skóre: 18 | blog: rpajikuv_blog
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Je hezké že si myslíte, že PHP 5 se chyba netýká. Zkusil jsem různé verze PHP co jsem kde našel ... od PHP 5.2 až po 8.0.0 se mi to chovalo úplně stejně blbě. Důvod proč je chyba opravena v řadě 7.3 a novější je ten, že starší už nejsou podporované, nikoliv protože by ve starších verzích ta chyba nebyla.

    Takže přeji příjemný život s touto chybou ve Vašem dobře vyzkoušeném a odladěném PHP 5.
    9.1.2021 12:32 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Čo oko nevidí, to srdce nebolí.

    Keby neboli tieto falošné pocity bezpečia, tak botnety prestanú existovať.
    9.1.2021 12:07 MP
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Vyzkousene a odladene php5? To jako vazne :D :D
    9.1.2021 20:53 Ján Dráb | skóre: 4 | Banská Bystrica
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Musí to byť super pocit, keď sa zákazník opýta, či je zraniteľnosť XY aj v ich stacku a ty odpovieš, že nie, aj keď dobre vieš, že od januára 2019 je verzia PHP, ktoré používajú nielenže nepodporovaná, no nebude dostávať ani kritické security fixy :D.
    Everything has room for improvement.
    9.1.2021 22:28 zxc
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    No, tak ti halt jednou napařej náhradu škody, no.
    No big deal.
    9.1.2021 13:02 yxcy
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    PHP tým je moc nóbl, než aby četl RFCčka.
    Nicméně tohle už je jen babrání se v detailech, po té epidemii SQL injection, kterou PHP způsobilo se svým skládáním dotazů.
    9.1.2021 21:12 Ján Dráb | skóre: 4 | Banská Bystrica
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    hovoriť, že PHP je zodpovedné za neošetrený vstup a neschopnosť programátorov kvoli sql injection, je ako tvrdiť, že C/C++/java sú zlé, lebo sú zodpovedné za buffer overflow, null pointer exceptiony alebo double free v xy programoch. cize podla mna kravina.
    Everything has room for improvement.
    9.1.2021 22:25 zcx
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Kdyby nerazili dementní přístup slepování jako jedinej přístup, a naopak ho od začátku označovali za prasárnu, tak vzniklo daleko míň děravejch zdrojáků. To je věc, kterou lze tvrdit celkem objektivně.
    Že má C/C++ problémy s memory corruption je taky objektivní nevýhoda, kterou se nové verze C++ snaží minimalizovat.
    Josef Kufner avatar 9.1.2021 22:44 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Vina PHP to je hlavně kvůli magic quotes a pár dalším blbostem.

    Stejně tak je vinou frameworků, když vedou programátory ke špatným přístupům.

    Stejně tak je vinou jazyků, že null pointer exception vůbec umožňují. Vynálezce null to sám považuje za “billion dollar mistake”.
    Hello world ! Segmentation fault (core dumped)
    10.1.2021 01:33 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Stejně tak je vinou jazyků, že null pointer exception vůbec umožňují.
    A jaké je tedy správné řešení toho, že ukazatel není nastaven?
    Quando omni flunkus moritati
    Josef Kufner avatar 10.1.2021 02:07 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Správné řešení je takovou proměnnou vůbec nemít.
    Hello world ! Segmentation fault (core dumped)
    10.1.2021 10:23 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Zajímavé, a co když vytvářím program, který potřebuje reflektovat stav, jestli něco existuje nebo neexistuje...?
    Quando omni flunkus moritati
    10.1.2021 12:54 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    ADTs
    10.1.2021 13:03 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Resp. lépe řečeno: Sumární typy. Potom takové ty věci jako existuje/neexistuje nebo vypadl výsledek/vypadla chyba jsou pouze specielné případy jednoho přístupu a nepotřebují nějakou explicitní specializovanou podporu v jazyce nebo nedej bože podporu, která pak platí befelem pro úplně všechno...
    10.1.2021 13:38 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Potom takové ty věci jako existuje/neexistuje nebo vypadl výsledek/vypadla chyba jsou pouze specielné případy jednoho přístupu
    Ještě k tomu dodám, že to má mj. tu výhodu, že se mezi těmahle dvěma snadno mapuje. Tj. optional hodnotu snadno namapuju na 'chybovatelnou' hodnotu tím, že tomu prostě řeknu, jaká tam má být chyba v případě, že hodnota chybí. 'Chybovatelná' hodnota se zkonvertuje ještě snáz (jedna mapovací funkce, která vevnitř prostě nahradí chybu za 'Nothing'), což se hodí v případech, kdy chcem ignorovat chybu a reportovat ji jen jako chybějící hodnotu.

    Tj. není potřeba dělat nějaký rozskoky typu jestli chybí hodnota, tak vyhoď výjimku tu a tu, jinak udělej to a to anebo jestli nastala výjimka, tak vrať prázdnou hodnotu, jinak to a to ... apod., člověk to prostě jen zkonvertuje jedno na druhý...
    Josef Kufner avatar 10.1.2021 13:59 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    … Výhoda pak je, že v místech, kde by normálně vznikla null pointer exception, jen překladač prohlásí, že tam nesedí typy a místo "Optional<něco>" má být jen "něco".
    Hello world ! Segmentation fault (core dumped)
    10.1.2021 08:13 billgates | skóre: 27
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Moderne C++17 uz na tento ucel prislo so std::optional, ktore moze, ale nemusi drzat hodnotu. Proste nieco ako akvivalent pointeru na NULL. Ked sa pokusis pristupit k hodnote cez metodu std::optional::value, tak bud vrati referenciu na hodnotu alebo vyhodi vynimku.
    xkucf03 avatar 10.1.2021 10:39 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše NullPointerException, std::optional a C++

    A není pak už jednodušší pro povinné hodnoty používat reference, zatímco ukazatele si nechat jen pro nepovinné (a u nich vždy počítat i s možností nullptr)?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    10.1.2021 23:27 linuxak
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Ne není to jednodušší. Nedá se to uhlídat, zcela jistě totiž někdo někdy na kontrolu nullptr zapomene a taky to nepěkně zapleveluje kód. Dereference nullptr je v C undefined behavior, program nemusí spadnout, např. na jednoduchých MCU bez MMU nespadne a pak to může dělat cokoliv. Součtový optional typ všechno tohle řeší. Vůbec nejlepší je ale mít jazyk bez null pointerů, třeba takový Rust je v tom poměrně daleko a null pointery mimo unsafe kód není potřeba prakticky vůbec řešit.
    xkucf03 avatar 10.1.2021 23:57 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++

    Souhlasím, že nedefinované chování je horší než vyhozená výjimka. Nicméně stejně se na chybu přijde až v době běhu a rozdíl oproti -fsanitize=address mi nepřijde až tak výrazný.

    #include <iostream>
    #include <string>
    #include <optional>
    
    int main(int argc, char**argv) {
    	// tohle odhalí ASan:
    	std::string* r = nullptr;
    	std::cout << "r = " << *r << std::endl;
    
    	// tady vyletí výjimka:
    	std::optional<std::string> n = nullptr;
    	std::cout << "n = " << *n << std::endl;
    }

    Stále je to polovičaté řešení, protože to nezabrání programátorovi udělat chybu a ani ji to neodhalí v době kompilace. Viz #21 – to rozlišování „bezpečných“ a „nebezpečných“ částí kódu nebo lépe ty anotace mi přijdou užitečnější, protože tam je možnost odhalit chybu už při kompilaci (nebo dokonce při psaní kódu v IDE, které na to může upozorňovat).

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    11.1.2021 00:11 billgates | skóre: 27
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Pozor, operator* v std::optional nehadze vynimku, ale ma nedefinovane chovanie. Vynimku hadze metoda value(). Kazdopadne, mat null pointer v jazyku je extremne dolezite, kedze to ma konkretny semanticky vyznam. Len s tym treba spravne narabat. V modernom C++ uz nie je vobec potrebne pouzivat obycajne pointre a teda ani operator* a nic podobne. Komplet vsetko sa da riesit cez smart pointre a dalsie techniky.
    xkucf03 avatar 11.1.2021 00:20 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Pozor, operator* v std::optional nehadze vynimku, ale ma nedefinovane chovanie. Vynimku hadze metoda value().

    Mně to hází výjimku v obou případech:

    terminate called after throwing an instance of 'std::logic_error'
      what():  basic_string::_M_construct null not valid

    Ale je pravda, že v dokumentaci se píše:

    The behavior is undefined if *this does not contain a value.

    This operator does not check whether the optional contains a value! You can do so manually by using has_value() or simply operator bool(). Alternatively, if checked access is needed, value() or value_or() may be used.

    To je asi docela škoda, protože pak stačí, aby programátor na jednom místě napsal hvězdičku a celý přínos std::optional se vytrácí. Takže zase viz #21.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    11.1.2021 10:09 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Tak vyhození výjimky může klidně být projev nedefinovaného chování ;-) Akorát se na to nedá spoléhat...

    Souhlasim s tim, že ten Optinal v jazycích jako C++ nebo Java ve výsledku není moc užitečný, ona celá pointa toho ML přístupu je ve vždy nenulových hondotách a Optional je jen doplněk (aby šly nějak udělat volitelné hodnoty)... Tj. zkopírovat jen ten doplněk jaksi k ničemu moc není...
    11.1.2021 10:16 billgates | skóre: 27
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Ono to ale ma zmysel. Myslienka C++ je v tom, ze musi poskytnut kazdemu programatorovi taky nastroj, aky potrebuje. Ako priklad uvediem napriklad std::vector. Pristupovat k jednotlivym polozkam je mozne cez metodu at, alebo operatorom [], ako v klasickom C. Kym at kontroluje, ze sa nepokusate pristupit mimo pola, tak [] tuto kontrolu nerobi. Na druhu stranu, kazda kontrola je draha a ked si je programator uplne isty, ze index na ktory pristupuje aj existuje, moze pouzit [] a usetrit cas. Rovnaka myslienka je aj pri std::optional a prakticky pri vsetkom. Vzdy mate moznost pouzit bezpecny alebo rychly pristup a tak je to spravne.
    11.1.2021 10:35 linuxák
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Nebo použiješ Rust místo C++ a máš obojí, bezpečnost i rychlost :-). Jasně, i Rust musí dělat kontrolu mezí při přístupu přes index, ale tohle může překladač úplně vyoptimalizovat při použití iterátorů nebo range based for, takže prakticky to nevadí. Navíc v Rustu má překladač přesné informace o tom, kam který pointer ukazuje, takže může udělat optimalizace, které C/C++ v principu nikdy nedokáže, protože to memory model C/C++ neumožnuje. V C/C++ je strict aliasing, ale ten funguje jen pro proměnné různých typů. Rust takové optimalizace umí udělat i pro proměnné stejných typů, ale je to momentálně zakázané, kód v LLVM je rozbitý (žádný jazyk mímo Rustu to nedokáže využít, takže to není odladěné). Pokud se to podaří dotáhnout, má Rust potenciál generovat lépe optimalizovaný kód než C/C++: https://github.com/rust-lang/rust/issues/54878
    11.1.2021 10:46 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Na druhu stranu, kazda kontrola je draha a ked si je programator uplne isty, ze index na ktory pristupuje aj existuje, moze pouzit [] a usetrit cas.
    Bounds-checking není drahá kontrola. Existujou situace, kdy to je drahé, ale jsou poměrně vzácné. IMO situace, kdy ušetřit bounds-checking je skutečně potřeba, reálně nastane řádově méně často, než situace, kdy programátor má iluzorní pocit, že "tenhle přístup přes operátor [] je zaručeně bezpečný".

    Navíc bounds-checking, resp. obecně kontrolu invariantů je typicky možné vytáhnout před výkonově kritickou část kódu, případně je schopen to udělat i sám kompilátor nebo mu můžu pomoct.

    Pokud se budem bavit o Rustu, tak ten poskytuje rychlý přístup taky, ale právě pod fíčurou unsafe , aby bylo jasno, že "bacha, tady se děje něco nebezpečnýho" a aby ten bezpečný přístup byl default.
    xkucf03 avatar 11.1.2021 11:07 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++

    Nevím, proč do toho zase taháš Javu, přijde mi to u tebe až jako taková obsese…

    A zrovna Java nabízí prostředky pro řešení nejen tohoto problému, ale obecně jakýchkoli kontrol a dodatečných metadat (anotace, anotační procesory…). Tzn. není v tom jazyce zadrátovaná ochrana konkrétně před NullPointerException, ale jsou tam obecné prostředky, framework, pro řešení podobných úloh.

    Tohle je dobré téma na článek. Díky za tip :-)

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    11.1.2021 12:01 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    WTF, Java byla pouze příklad vedle C++ a pouze proto, že tady byla už zmíněna v diskusi dvouma jinejma uživatelema (z nichž druhý jsi ty v #21).

    Pokud máš pocit, že to vyřeší anotace a metadata, tak prosim, bránit ti v tom nebudu :-)
    xkucf03 avatar 11.1.2021 12:53 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++

    Aha, takže obsese. Ve #21 nepadlo ani slovo o Javě.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    11.1.2021 15:50 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    No dobře, když tě to tak irituje, tak si nahraď větu
    Souhlasim s tim, že ten Optinal v jazycích jako C++ nebo Java (...)
    něčim jako
    Souhlasim s tim, že ten Optinal v běžných statick typovaných jazycích, které nevyžadují nenulovatelné pointery/reference (...)
    C/C++ a Java jsou ty nejvýznamnější příklady, které mě napadly. Ještě by se dal asi přidat C#, ale ten jde dost mimo mě a má nějakou podporu pro non-nulovatelné reference, u které moc neznám vlastnosti a implikace. Dále asi přichází v úvahu Golang, ale ten zas zřejmě nemá žádné ambice poskytovat Optional typ (nemá ani generika). Dále neuvažuju dynamicky typované jazyky, protože se bavíme o fíčuře statické analýzy. No takže ono těch jiných příkladů vlastně až tak moc nezbývá, alespoň z běžných/mainstream jazyků...

    Každopádně, vyjadřoval v zásadě souhlas s tvým názorem, aspoň jsem si to myslel. Jsem zas jednou udělal tu chybu, že jsem napsal něco do xkucf subvlákna :-D
    11.1.2021 09:38 linuxák
    Rozbalit Rozbalit vše Re: NullPointerException, std::optional a C++
    Poměrně dobře to má vyřešené Rust, Option ve spojení s pattern matchingem je docela mocný nástroj a nutí ošetřit všechny stavy, neošetřená varianta neprojde už při kompilaci: https://www.ameyalokare.com/rust/2017/10/23/rust-options.html

    A ano i v Rustu jde prasit a místo pattern matchingu se dá použít třeba unwrap, ale ani to nevede na nedefinované chování, pokud v optionu nic není, zavolá se panic.
    xkucf03 avatar 10.1.2021 10:35 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše NullPointerException, Optional, @NotNull

    Tak zrovna u jazyků pracujících se surovou pamětí a ukazateli je tahle diskuse celkem zbytečná – tam se tomuto problému nejde vyhnout a ukazatel je jen číslo, které může být klidně nula nebo ukazovat na nějakou nesmyslnou pozici v paměti. Maximálně se to dá (částečně) řešit rozlišováním nějakých režimů, kdy předem řeknu, zda se daná část kódu chová „bezpečně“ nebo „nebezpečně“.

    Zajímavější je tahle diskuse u jazyků, které programátora od surové paměti odstiňují. Tam se nabízí použití Optional, ale pokud ho člověk nebude používat důsledně všude a nezakáže se používání proměnných, které by mohly být null/prázdné, tak to stejně nic neřeší. A balit všechno do Optional a všechny operace provádět, jen když hodnota nechybí, vede na ošklivý a nepřehledný kód. Alespoň co se týče běžných-imperativních jazyků. Hloupé na tom je i to, že s hodnotou, která nikdy nechybí a s hodnotou, která chybět může, se pracuje jinak a ten zápis je odlišný – přitom tahle vlastnost (povinný/nepovinný atribut) se v čase běžně mění, je to součást měnícího se zadání. To už mi přijde užitečnější si proměnné nějak anotovat (třeba jako @NotNull, @Nullable atd.) a mít pro povinné i nepovinné stejnou syntaxi, ale dát kompilátoru nebo dodatečnému analyzátoru kódu informaci, na základě které může ověřit správnost a upozornit nás, když neošetřujeme potenciálně chybějící hodnoty a chováme se, jako kdyby byly vždy přítomné. Tzn. dívat se na tu povinnost jako na metadata, na základě kterých se dají dělat kontroly, ale neměnit kvůli tomu syntaxi.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Josef Kufner avatar 10.1.2021 14:22 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: NullPointerException, Optional, @NotNull
    Co poslední dobou vidím snahy o používání Rustu pro psaní jádra a modulů, tak se tyto dvě věci zjevně nevylučují. Můžeš mít jazyk, který pracuje na velmi nízké úrovni a přitom ti ten null pohlídá. Asi se nepůjde vyhnout některým případům, ale to ten unsafe režim Rustu řeší a ohlídat ručně pár míst je mnohem snažší, než to hlídat všude.

    Ošklivost kódu řeší syntaktický cukřík. Třeba v PHP a Typescriptu máš otazníček, který říká, že tam může být null a pak to prská, když předáváš typ s otazníčkem někam, kde otazníček není. Reálně to je jeden znak navíc v kódu. Při čtení properties objektu pak jde použít otazníček také (null-safe operator: $a?->b() je zkrtka pro $a !== null ? $a->b() : null), což tu kontrolu schová, když víš, že s tím počítáš, nebo to nenastane. A když na začátek metody dáš podmínku, která ošetří null, tak pak z toho máš typ bez otaznčku a je to v pohodě také.

    Aby tento přístup fungoval, je potřeba mít dostatečně schopný typový systém. Jazyky na úrovni C++ a Javy na to prostě nestačí.
    Hello world ! Segmentation fault (core dumped)
    10.1.2021 10:22 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Je rozdíl mezi existencí null a null pointer exception.

    null je často legitimní stav – ne nadarmo pro to mají databáze speciální hodnotu. Chyba je, pokud se nerozlišuje, zda proměnná může nebo nemůže být null (tohle mají relační databáze ošetřené už celé generace, takže se nelze vymlouvat, že to někoho nenapadlo) a že v případě, kdy může být null, není povinné ošetření tohoto stavu.
    Josef Kufner avatar 10.1.2021 14:26 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    NULL v SQL je něco jiného. Tam je to jen další hodnota, která je zvlášť ošetřená. V připadě pointerů je rozdíl v tom, že pointer jde dereferencovat a to ovlivňuje cestu kódem. V SQL je cesta kódem stále stejná, jen výrazem probublá NULL (nebo se zahodí v případě agregačních funkcí).
    Hello world ! Segmentation fault (core dumped)
    10.1.2021 18:37 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    V obou případech null nebo NULL vyjadřuje neznámou nebo neexistující hodnotu. Programovací jazyky by s tím samozřejmě také mohly zacházet inteligentněji – a mnohé to dělají.
    11.1.2021 11:29 alkoholik | skóre: 40 | blog: Alkoholik
    Rozbalit Rozbalit vše Re: Bezpečnostní chyba CVE-2020-7071 v PHP
    Az na Oracle DB, ktera si mysli, ze NULL string je prazdny retezec.

    Založit nové vláknoNahoru


    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.