Na GitHubu byl publikován reprodukovatelný návod, jak rozchodit Adobe Lightroom CC na Linuxu a Wine. Návod byl vytvořený pomocí AI Claude Code.
Pokud by někdo potřeboval Wayland kompozitor uvnitř počítačové hry Minecraft, aby mohl zobrazovat okna desktopových aplikací přímo v herním prostředí, může sáhnout po Waylandcraftu. Ukázka na YouTube.
Uroš Popović v krátkém článku vysvětluje, co jsou emulátor terminálu, TTY a shell a jaké jsou mezi nimi rozdíly. Jde o první díl seriálu na jeho novém webu Linux Field Guide věnovaném nízkoúrovňové práci s linuxovými systémy.
Byl vydán Debian 13.5, tj. pátá opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.14, tj. čtrnáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
CiviCRM (Wikipedie) bylo vydáno v nové verzi 6.14.0. Podrobnosti o nových funkcích a opravách najdete na release stránce. CiviCRM je robustní open-source CRM systém navržený speciálně pro neziskové organizace, spolky a občanské iniciativy. Projekt je napsán v jazyce PHP a licencován pod GNU Affero General Public License (AGPLv3). Český překlad má nyní 45 % přeložených řetězců a přibližuje se milníku 50 %. Potřebujeme vaši pomoc, abychom se dostali dál. Pokud máte chuť přispět překladem nebo korekturou, přidejte se na platformu Transifex.
Další lokální zranitelností Linuxu je ssh-keysign-pwn. Uživatel si může přečíst obsah souborů, ke kterým má právo ke čtení pouze root, například soubory s SSH klíči nebo /etc/shadow. V upstreamu již opraveno [oss-security mailing list].
Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.
Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.
Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.
Hru The Legend of Zelda: Twilight Princess od společnosti Nintendo si lze nově díky projektu Dusklight (původně Dusk) a reverznímu inženýrství zahrát i na počítačích a mobilních zařízeních. Vyžadována je kopie původní hry (textury, modely, hudba, zvukové efekty, …). Ukázka na YouTube. Projekt byl zahájen v srpnu 2020.
vim ~/.emacs
for ( i = 0; i < strlen(string); ++i ) {
autoři si s optimalizacemi moc hlavu nedělali. Je to o vyhnutí se dynamické alokaci (o 4kB poli v lokální proměnné nemluvě).
Na githubu mají dobrou opravu:
Do not double escape names. Fixes #36
S tou předčasnou optimalizací je trochu vedle. Jak je vidět z
Asi optimalizovali na obsazenou paměť ne na výkon, ale vyústilo to v to, že si paměť nechtěně přepisovali. To už mi snad přijde lepší, když tam bude únik paměti a program je nakonec sestřelen OOM killerem, než aby tam byla potenciálně bezpečnostní díra v podobě přetečení.
Samozřejmě ideál je to napsat tak, aby paměť neunikala, žralo jí to třeba o něco víc, ale konstantně, a bylo to bezpečné.
for ( i = 0; i < strlen(string); ++i ) {
Někdy se iteruje v opačném směru, k nule, což je trochu nezvyk, ale vlastně proč ne (pokud nezáleží na pořadí).
Nebo si klasicky uložit délku do proměnné.
o 4kB poli v lokální proměnné nemluvě
A jak by to mělo být správně? Alokovat dvojnásobek délky vstupu + uvozovky a nulový bajt? (jak navrhuje Kruci pod článkem) Nebo si alokovat nějakou dynamickou strukturu (jakou?) o velikosti tak 120 % vstupu, protože tam se to většinou vejde (a případně se ještě zvětší).
Do not double escape names. Fixes #36
Njn, chyba tam zůstala dál, jen se přestala projevovat.
for ( i = 0; i < strlen(string); ++i ) {Někdy se iteruje v opačném směru, k nule, což je trochu nezvyk, ale vlastně proč ne (pokud nezáleží na pořadí).
Nebo si klasicky uložit délku do proměnné.
Se zapnutými optimalizacemi by měl překladač toereticky uložit výsledek strlen(string) do neviditelné automatické dočasné proměnné (popř. registru) a tu používat v cyklu, i když osobně bych na to raději nespoléhal - překladač musí mít jistotu, že vrácená hodnota je konstantní po celou dobu cyklu (tj. např. žádná pointerová aritmetika nebo předávání dalším funkcím, pokud není parametr const), v opačném případě bude volat strlen(string) při každém průchodu. Když už si někdo nechce zaplácávat zásobník, může proměnné použité k uchování délky řetězce nastavit jako register a doufat, že to překladač pochopí správně a nebude jí alokovat žádnou paměť.
A i když iterovat "pozadu" je sice z algoritimického hlediska ekvivaltení iterování směrem vpřed, procesor, cache a paměti apod. jsou dělané na to, že se paměť čte směrem dopředu, ne odzadu (viz prefetch),
vsprintf(), ta zajímavá funkce se jmenuje realloc(). Na začátku si alokuješ těch 120% a když to nebude stačit, tak jen string = realloc(string, 2 * strlen(string)) a hotovo.
assert, že char *string náhodou nesměřuje někam do csv[]
Jenže pak by nešlo escapovat dvakrát. V tomto programu to asi není potřeba, ale jinak se to hodí (např. když chci někam vložit ukázku, jak vypadá escapovaný kód).
Pro mě má funkce prostě nějaký definiční obor a nějakou návratovou hodnotu a můžu ji zanořit třeba stokrát a pořád by měla fungovat. Proč by měla mít takové omezení jenom kvůli tomu, jaký jazyk jsem si pro implementaci vybral?
Dobré řešení asi je předávat ten buffer zvenku jako parametr a uvnitř nic nealokovat, ale pak to zase není funkce, ale spíš procedura.
Dobré řešení asi je předávat ten buffer zvenku jako parametr a uvnitř nic nealokovat, ale pak to zase není funkce, ale spíš procedura.Hlavne nevis jak velky ho budes potrebovat.
To je pravda – musím znát implementační detaily té funkce (od kterých bych měl normálně abstrahovat), abych určil maximální velikost výstupu. Jak to tedy napsat správně?
Na tom mi nesedí, že se paměť uvolňuje někde jinde, než kde byla alokována, resp. že je za to odpovědný někdo jiný a je to hodně náchylné k chybám. Ale asi je to v C normální…
.
BTW: dá se to nějak automaticky analyzovat nebo to musí všechno pročítat člověk? Odhalí nějaký nástroj tyhle problémy?
Tiskni
Sdílej: