Immich byl vydán v první stabilní verzi 2.0.0 (YouTube). Jedná se o alternativu k výchozím aplikacím od Googlu a Applu pro správu fotografií a videí umožňující vlastní hosting serveru Immich. K vyzkoušení je demo. Immich je součástí balíčků open source aplikací FUTO. Zdrojové kódy jsou k dispozici na GitHubu pod licencí AGPL-3.0.
Český telekomunikační úřad vydal zprávy o vývoji cen a trhu elektronických komunikací se zaměřením na rok 2024. Jaká jsou hlavní zjištění? V roce 2024 bylo v ČR v rámci služeb přístupu k internetu v pevném místě přeneseno v průměru téměř 366 GB dat na jednu aktivní přípojku měsíčně – celkově jich tak uživateli bylo přeneseno přes 18 EB (Exabyte). Nejvyužívanějším způsobem přístupu k internetu v pevném místě zůstal v roce 2024 bezdrátový
… více »Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-10-01. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Jedná o první verzi postavenou na Debianu 13 Trixie.
Byla vydána nová verze 4.6 svobodného notačního programu MuseScore Studio (Wikipedie). Představení novinek v oznámení v diskusním fóru a také na YouTube.
Společnost DuckDuckGo stojící za stejnojmenným vyhledávačem věnovala 1,1 milionu dolarů (stejně jako loni) na podporu digitálních práv, online soukromí a lepšího internetového ekosystému. Rozdělila je mezi 29 organizací a projektů. Za 15 let rozdala 8 050 000 dolarů.
Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.17. Díky 278 přispěvatelům.
Bylo vydáno openSUSE Leap 16 (cs). Ve výchozím nastavení přichází s vypnutou 32bitovou (ia32) podporou. Uživatelům však poskytuje možnost ji ručně povolit a užívat si tak hraní her ve Steamu, který stále závisí na 32bitových knihovnách. Změnily se požadavky na hardware. Leap 16 nyní vyžaduje jako minimální úroveň architektury procesoru x86-64-v2, což obecně znamená procesory zakoupené v roce 2008 nebo později. Uživatelé se starším hardwarem mohou migrovat na Slowroll nebo Tumbleweed.
Ministerstvo průmyslu a obchodu (MPO) ve spolupráci s Národní rozvojovou investiční (NRI) připravuje nový investiční nástroj zaměřený na podporu špičkových technologií – DeepTech fond. Jeho cílem je posílit inovační ekosystém české ekonomiky, rozvíjet projekty s vysokou přidanou hodnotou, podpořit vznik nových technologických lídrů a postupně zařadit Českou republiku mezi země s nejvyspělejší technologickou základnou.
… více »Radicle byl vydán ve verzi 1.5.0 s kódovým jménem Hibiscus. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Společnost OpenAI představila text-to-video AI model Sora 2 pro generování realistických videí z textového popisu. Přesnější, realističtější a lépe ovladatelný než předchozí modely. Nabízí také synchronizované dialogy a zvukové efekty.
Programujem v občas v C a občas pod MS Win. A už nejakú dobu ma štve, že tradičné C funkcie ako fopen(),sprintf(),sscanf(), strcpy() a desiatky ďalších sú označované Microsoftom za depreciated a nahrádzané funkciami so suffixom "_s". Štve ma to, pretože to sťažuje písanie multi-platformného kódu. Ak ste na tom podobne, možno by vás zaujímal tento post. Zaslúžil by si vyššie skóre
... all those "safe" *_s functions are actually covered by an ISO C99 TR? [open-std.org]. There's also a FOSS implementation [sourceforge.net] available under the MIT license.
Tiskni
Sdílej:
sscanf()
). Ale zatímco u gets()
se to zdůrazňuje (takže tuto funkci snad už dnes nikdo nepoužívá), celá halda těch zbývajících se vesele používá dál, a to i v tutoriálech pro začátečníky (což je výtečná cesta, jak jejich použití dále upevňovat a prodlužovat, a jak si tedy zadělávat na budoucí záludné problémy v programech).
a) ak to je bezpečnostná chyba, ako písať multiplatformný kód? Čo použiť na Linux-e?
Pokud nejde psát multiplatformní kód jinak, než přímým použitím standardní C knihovny, tak jsem žil celý život ve lži.
char *strncpy(char *dest, const char *src, size_t n)?
Znovu se ptám, víte co strncpy dělá? Abyste nebyl překvapen!
Jedna z nejhorších bezpečnostních chyb, a kupodivu velmi častých, je použití strncpy Céčkaři, kteří netuší, co ta funkce opravdu dělá.
No jo no
Ona dělá trošku víc, než jenom kopíruje.
A zase při kopírování občas nezkopíruje to, co si ten člověk nahoře myslí.
Cozstrncpy_s,char *strncpy(char *dest, const char *src, size_t n)?
Ona to skutečně je bezpečnostní chyba
Jaká je bezpečnostní chyba v tomto kódu?:
int pokus(const char* src)
{
if (src == NULL)
return ERR_NULL_STRING;
size_t src_size = ::std::strlen(src);
if (src_size > 10)
return ERR_TOO_LONG_STRING;
char buff[11];
::std::strcpy(buff, src);
// ... dalsi akce ...
return ERR_OK;
}
Chci slyšet přesné vysvětlení, jak výše uvedené použití strcpy způsobilo bezpečnostní chybu.
Já bych to zobecnil: Každou funkci jde použít chybně, naprosto každou. Takže rizikem je naprosto každá funkce, kterou v programu použijete.
Ale jsou určitá dogmata, která – bez pochopení podstaty samé – se budou papouškovat dokola.
Stejně chybně můžete použít třeba strnprintf – jednoduše do ní třeba napíšete, že buffer má velikost 100 bajtů a později program upravíte na buffer o velikosti 20 bajtů. A máte stejnou bezpečnostní chybu.
Že je to nepravděpodobné? Co tohle:
wchar_t buff[10];
wcsnprintf(buff, sizeof(buff), ...);
A hned máte úplně stejnou bezpečnostní chybu, i se „safe“ funkcí.
Rád bych, aby se přestalo blekotat o nebezpečnosti některých funkcí. Největší bezpečnostní chyby dělá programátor, který má mylný dojem, že některé funkce jsou „bezpečné“, a je celkem jedno, jaké to jsou.
od doby co je v hodne distribucich SW prekladan s fortify check to zas takovy bezpecnostni problem neni, coz nemeni nic na tom, ze je to stale chyba... jen nasledky nemusi byt tak dramaticke
Tak, já bych se nebál prostě a jednoduše každý výskyt třeba strcpy označit za [bezpečnostní] chybu.
Ona to skutečně je bezpečnostní chybamuzete mi dolozit, ze kazdy vyskyt strcpy je bezpecnostni chyba?
strcpy()
patří do druhé skupiny, kdežto klasický připad té třetí je gets()
, který nemáme šanci zabezpečit, protože vstup je plně na libovůli uživatele.
sscanf
nebo scanf
? Pokud se tím nenačítá celý řetězec neurčité délky (formátem %s
), ale číslice, případně znaky, nemělo by se nic stát.
Ona to skutečně je bezpečnostní chyba (taktéž třeba to sscanf()). Ale zatímco u gets() se to zdůrazňuje (takže tuto funkci snad už dnes nikdo nepoužívá), celá halda těch zbývajících se vesele používá dál
Mezi těmi dvěma příklady je ale hodně podstatný rozdíl. Zatímco gets()
je opravdu nebezpečná vždy, strcpy()
je bezpečnostní chyba jen v případě, že neošetřím, jestli mám dost místo pro to, co kopíruji. Takže jde jen o potenciálně rizikovou funkci, na rozdíl od gets().
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif // _MSC_VER
gets_s
, o které v tom PDF píšou, že je lepší místo ní použít raději fgets
. Mimochodem, pochopil jste vůbec, co dělá funkce strncpy?
Věřte mi, že řada Céčkařů žije v bludu, že ví co skutečně tato funkce dělá.
Víte o tom, že funkce strncpy může zkopírovat string ukončení řetězce koncovou nulou?
Z naprostého prdu dokázal udělat skandální záležitost především autor článku.
A já jsem to tady jenom chtěl trochu rozbít, protože je tu úžasné, jak spousta lidí, co se rozhořčují nad MS netuší, která bije.
Realita je jednoduchá: V jakémkoli low level jazyce můžete nasekat chybu na každém řádku kódu, ať použijete cokoli. Low level jazyk jako je Céčko Vám umožní natlouci si čumák kam se jenom podíváte. Naprosto vše je v něm „potenciálně nebezpečné“, fakticky nulové kontroly, vše musí hlídat programátor a vědět co dělá.
Chcete používat bezpečné funkce? Jak jednoduché! Nepoužívejte Céčko! Zvolte si high level jazyk, který má kontroly a bezpečnost už v jazyce. Nebo si zvolte Adu. Nebo něco podobného. Ale pamatujte si, před Vaší blbostí (případně nezkušeností) Vás neochrání vůbec, ale naprosto nic. I tam jde udělat chybu v algoritmu, dostat se do nekonečné smyčky a řadu jiných věcí.
Céčko je systémový jazyk! Tedy pro ty, kdo chtějí programovat operační systém, nebo kdo chtějí programovat věci na nízké úrovni. Takoví lidé potřebují, a to velmi nutně, jazyk, který jim dovolí všechno – včetně zhroucení počítače, včetně chyb jejich vlastní blbosti a další. Ano, Céčko je nebezpečný jazyk – je v něm potenciálně nebezpečná každá funkce, každý řádek.
A za druhé – všechny safe funkce, co si prosadil Microsoft je schopen běžný programátor naprogramovat za jedno odpoledne. Všechny ty funkce s přídavkem _s v názvu jsou velmi jednoduché k napsání, a dají se nádherně – a multiplatfromně – napsat jako modul nad standardní knihovnou Céčka. Ať už si o MS myslím cokoli, jeho počin není úplně nejhorší, a je za ním dobrá myšlenka.
Stringové funkce v Céčku je totiž něco příšerného. A nejenom příšerného, ale také pomalého, neefektivního, a navíc chyby přitahujícího. Jakýkoli blbý objekt typu string, který napíšu v C++, nebo strukturu, kterou budu emulovat v C objekty a nad ní vystavím pár funkcí – rychlostně, efektivitou i bezpečností překonají všechny funkce strněco v Céčku. I poměrně špatně napsaná STL třída std::string rychlostně trumfne low level práci v Céčku se strněco funkcemi, na komfort a bezpečnost ani nemluvě.
Microsoft měl dobrou ideu – postavit nad nedomyšlenou, neúplnou množinou strněco funkcí v Céčku úplnou množinu funkcí, které navíc jsou schopny kontrolovat délky a rozsahy. Tuto množinu nabídl ISO ke standardizaci, ale byl odmítnut. Protože jejich funkce jsou tisíckrát lepší, než to, co je ve standardní knihovně Céčka, zařadil je tedy do svého kompilátoru a sám je používá. Multiplatformovosti to nebrání – a pokud to někdo tvrdí, měl by si uvědomit, že moc toho ještě neumí. Jsou to jednoduché funkce, které nikterak nezávisí na žádné platformě.
Z naprostého prdu dokázal udělat skandální záležitost především autor článku.Uh. To bolo na mňa?
A za druhé – všechny safe funkce, co si prosadil Microsoft je schopen běžný programátor naprogramovat za jedno odpoledne.To možno. Ale nie som si istý, či si pochopil môj problém:
(MS) Tuto množinu nabídl ISO ke standardizaci, ale byl odmítnut.To máš odkiaľ? Pretože ja hore linkujem dokument od open-std.org, kde sa tie funkcie pridávajú do C99.
Mimochodem, teď jsem si vylistoval zdrojové kódy všech safe funkcí v C kompilátoru (MS automaticky dává ke kompilátoru zdrojové kódy celé runtime knihovny). Celá sada funkcí, včetně zdrojového kódu pro obě varianty, tedy jak pro 8-bitové znaky, tak pro unicode – je psána multiplatformě i Microsoftem, a celé to má dohromady 64 KB zbytečně roztahaných zdrojových kódů.
Celá sada funkcí, včetně zdrojového kódu pro obě varianty, tedy jak pro 8-bitové znaky, tak pro unicode – je psána multiplatformě i MicrosoftemNemal som na mysli multiplatformovosť čo do 8-bit vs. WCHAR, ale použitie na OS, ktorý nie je od MS, alebo kompilátorom, ktorý nie je od MS. Čo sa stane s existujúcim kódom, keď _CRT_SECURE_NO_WARNINGS jedného dňa zanikne?
Nemal som na mysli multiplatformovosť čo do 8-bit vs. WCHAR, ale použitie na OS, ktorý nie je od MS, alebo kompilátorom, ktorý nie je od MS.Imho aj ten príspevok nad tebou
Čo sa stane s existujúcim kódom, keď _CRT_SECURE_NO_WARNINGS jedného dňa zanikne?Čo by sa akože malo stať?
char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
The strncpy() function copies at most n characters from s2 into s1. If s2 is less than n characters long, the remainder of s1 is filled with `\0' characters. Otherwise, s1 is not terminated.Zvírazněná pasáž je velice důležitá, protože říká, že pokud bude zdrojový řetězec větší než cílový, zkopíruje se 'n' znaků do cílového bufferu a ten nebude ukončený nulou. V praxi to znamená, že zavoláním funkce strlen() nebo jakékoliv neuvážené použití takového bufferu povede s největším štěstím k pádu (mluvím o štěstí, protože ladit tyto chyby může někoho pěkně vytočit
Jenom poznámku – to není vytahování se na laiky. To je jen upozornění, že když někdo machruje v této diskusi, měl by na to mít.
Ale je fajn, že tu mnozí konečně objeví, co skutečně dělá strncpy. Sám jsem se divil, kolik lidí to neví.
s1[n-1]='\0'
. Na pocet znakov sa to podoba M$ fciam, na pocet podtrzitok to dokonca vedie.
my to u nas ve firme obchazime makrama. A to jiz leta, uz i napr u systemovych funkci (stat,open.write,read ...) mel M$ ty kompatibilni jinak pojmenovany.
Jinak, jiz po tisici, C neni urcena k tomu, aby se v tom psaly programy, C se pouziva k psani generatoru programu. A v takove konstelaci neni strcpy zadny problem, protoze o to, aby ty delky stringu byly konformni se stara nekdo jiny.