HollowByte je zranitelnost typu Denial of Service (DoS) v kryptografické knihovně OpenSSL. Útočník může odesíláním škodlivého payloadu o velikosti pouhých 11 bajtů zaplnit paměť serveru. OpenSSL před ověřením dat vyhradí nepřiměřený blok paměti (až 131 KB). Server pak čeká na data, která nepřišla. Zranitelnost je opravena ve verzích OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6 a 3.0.21.
Ve španělské A Coruñě probíhá GUADEC 2026, tj. letošní konference vývojářů a uživatelů desktopového prostředí GNOME. Videozáznamy přednášek jsou k dispozici na YouTube.
Společnost Collabora ve spolupráci s Valve vyvíjí Holo Core, tj. port Arch Linuxu pro ARM64 procesory (AArch64), který bude pohánět VR headset Steam Frame. Pro testování Arch Linuxu pro AArch64 jsou k dispozici binární balíčky, zdrojové kódy i kontejner pro Docker nebo Podman.
Mikroprocesor Zilog Z80 byl oficiálně uveden na trh před 50 lety, tj. v červenci 1976. Výroba mikroprocesoru skončila v roce 2024.
Výzkumníci ze společnosti ESET objevili 11 zapomenutých UEFI shim zavaděčů, které byly podepsány společností Microsoft, a které umožňují útočníkům obejít ochranu UEFI Secure Boot na většině zařízení. Microsoft je zneplatnil (přidal jejich hash do databáze dbx) v rámci aktualizace Patch Tuesday dne 9. června 2026. Uživatelé Linuxu mohou databází aktualizovat pomocí LVFS. Ověřit zneplatnění zavaděčů lze pomocí skriptu uefi-dbx-audit. Jedná se o CVE-2026-8863 a CVE-2026-10797.
pico-usb-wifi je open source firmware pro Raspberry Pi Pico W, který jej promění v USB Wi-Fi adaptér. Po připojení k počítači se objeví jako zařízení USB CDC-NCM.
Americká společnost Google ze skupiny Alphabet bude muset podle nových požadavků Evropské unie umožnit společnosti OpenAI i dalším konkurentům v oblasti umělé inteligence (AI) a internetových vyhledávačů přístup ke svým službám. Ve svém rozhodnutí o tom včera informovala Evropská komise (EK). Opatření má zajistit dodržování pravidel, jejichž cílem je omezit v EU tržní sílu velkých technologických firem. Google s tím nesouhlasí.
… více »Nové verze webových prohlížečů Chrome a Firefox jsou vydávány každé 4 týdny. Aktuální verze Chrome je 150. Aktuální verze Firefoxu je 152. V březnu bylo oznámeno, že od září přejde Chrome na dvoutýdenní cyklus vydávání verzí. To by znamenalo, že Chrome v číslování verzí Firefox brzy přeskočí. Vývojáři Firefoxu proto také od září přecházejí na dvoutýdenní cyklus vydávání verzí. :-)
Microsoft Comic Chat (Wikipedie), tj. grafický IRC klient z devadesátek, který převáděl konverzace na IRC do podoby komiksových panelů, a který zpopularizoval font Comic Sans, je dnešním dnem open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Byla vydána (𝕏) nová verze 26.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 26.7 je Xenial Xenops. Přehled novinek v příspěvku na fóru.
Zdravím, mohl by mi s tím proísm vás někdo pomoc, vbc se nechytám a nevím jak pokračovat. Děkuji za pomoc! Jedná se o jazyk C. Přikládám soubor
Řešení dotazu:
bez papíru/čmárání bokem to fakt jako někdy u víc složitějších věcí nejde ale todleto imho neni ten případ kdyby papír jako něco víc řešil :O ;D
pridanie dat na zaciatok - ekvivalent v realnom zivote, co musim urobit ak chcem pridat novy knizku v kniznici?
jít do knichkupetví koupit knížku najít nejvíc nejvolnější místo v nějakým tom regálku knihovny a tu knížku tam jakoby strašně silou narvat ajeto :D ;D
takle si to ale asi jako nemyslel že :D ;D
nesmíš namě ale říct že eště nespim :O :O :D ;D
kuli tomu kolik je hodin si to jako určitě musíš pořádně zkontrolovat protože sotva udržim voči votevřený teďko už :O :O :D ;D pustit to ale de a asi to i jako funguje si myslim :D
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
// fakt jako maj bejt ty data voddělený vod těch položek??????? :O :O
typedef struct
{
int id;
char * name;
}
Object;
typedef struct PolozkaSeznamu PolozkaSeznamu;
struct PolozkaSeznamu
{
Object data;
struct PolozkaSeznamu * next;
};
typedef struct
{
PolozkaSeznamu * first;
// k čemu jako potřebujem v dopředným seznamu pološku last když
// ji jakoby žádná z těch funkcí nepoužívá nanic?? :O :O
//PolozkaSeznamu * last;
}
Seznam;
/**
* Inicializace seznamu. Vytvori prazdny seznam.
*/
Seznam * list_ctor()
{
Seznam * sznm = malloc(sizeof(Seznam));
sznm->first = NULL;
return sznm;
}
PolozkaSeznamu * novaPolozka(Object data)
{
PolozkaSeznamu * p = malloc(sizeof(PolozkaSeznamu));
p->data = data;
p->next = NULL;
return p;
}
/**
* Vlozi polozku na zacatek seznamu.
*/
void list_insert_first(Seznam * sznm, PolozkaSeznamu * polozka)
{
//nejdřiv si zapamatujem první položku v seznamu protože ji jakoby přepišem novou první
//ale tu starou potřebujem aby jsme ji napojili zatu první
PolozkaSeznamu * puvodniPrvni = sznm->first;
// přepišem první položku novou skovanou v proměný 'polozka'
sznm->first = polozka;
// celou tu nudli položek/uzlů celýho seznamu/grafu teďko musíme zase připojit
// známe uzlík kterým ta šňurka má pokračovat ==> toje ta původní první položka seznamu
// nóó tak ji napojíme jako příští uzel naši nový první položky :O ;D
polozka->next = puvodniPrvni;
// nebo taky mužem přidat ukazatelem v tom poli takle Ňejak
// sznm->first->next = puvodniPrvni
// pracujem se stejnou věcí furt
}
/**
* Vrati true, pokud je seznam prazdny.
*/
bool isEmpty(Seznam * sznm)
{
// budem předpokládat že ten seznam je prázdnej když nemá žádnou první položku
// noa první položku nemá když ukazatel 'first' kouká nikam jakože teda na NULL
if(sznm->first == NULL)
return true;
else
return false;
//celý todleto mužem frajersky přepsat jako
//return sznm->first;
}
/**
* Odstrani prvni prvek seznamu, pokud je.
*/
void list_delete_first(Seznam * sznm)
{
//kdybysme rovnou jentak dali dopryč první položku tak by se nám seznam rozbil :O :O
// musíme si skovat druhou položku seznamu atu pak strčit misto ty první
// kterou jakoby chcem vodstranit
PolozkaSeznamu * prvni = sznm->first;
PolozkaSeznamu * druha = prvni->next;
//uvolníme paměť první položky
// skoro uplně ždycky když někde děláme 'malloc' tak taky jakoby pak musíme někde dělat 'free'
free(prvni);
//jako novou první položku seznamu nastavíme druhou
sznm->first = druha;
}
/**
* Vrati pocet polozek seznamu.
*/
unsigned int list_count(Seznam * sznm)
{
//spočítáme kolik máme položek v seznamu
// uděláme si nějakou počítací proměnou která bude začínat na nule
// a pudem seznamem vod první po poslední položku a za kažnou naštívenou položku
// počítací proměnou inkrementujeme/zvíšíme o jedničku
// nóó a to se jakoby po nás v týdletý funkci chce :D ;D
//začínáme první položkou celýho seznamu
// kdyby náááhodou byl seznam nazačátku prázdnej tak nám stejně tendleten argolytmus udělá že vrátí 0
PolozkaSeznamu * pristiPolozka = sznm->first;
// naše počítací proměná
unsigned int kolik = 0;
// todleto si měl dobře :D
// děláme dokuď proměná 'příštíPoložka' neni null/jeji adresa je věčí od nuly takže jakoby 'true'
while(pristiPolozka)
{
// zvednem počítací proměnou o 1 a jako příští položku nastavíme nóóóóóóó
// příští položku příští položky :D :D :D ;D
kolik++;
pristiPolozka = pristiPolozka->next;
}
//vrátíme kolik sme napočítali
return kolik;
}
/**
* Najde polozku seznamu s nejmensim identifikatorem. Vraci NULL, pokud je
* seznam prazdny.
*/
PolozkaSeznamu *list_find_minid(Seznam * sznm)
{
//podobně jako v předchozí funkci budem procházet seznam položku popoložce
// akorátže budem mit navíc jednu proměnou typu 'PoložkaSeznamu' noa do ní si budeme skovávat položku s nejvíc nejmenším id vobsaženýho oběktu ;D
PolozkaSeznamu * pristiPolozka = sznm->first;
//sem si budeme strkat tu položku s nejvíc nejmenším id oběktu
// zatim si tam dáme tu uplně první naštívenou
PolozkaSeznamu * nalezenaPolozka = sznm->first;
while(pristiPolozka)
{
//pokuď id právě našívený položky je menčí než id zatim nalezený položky
// tak si ji uložíme misto tý nalezený
if(pristiPolozka->data.id < nalezenaPolozka->data.id)
nalezenaPolozka = pristiPolozka;
pristiPolozka = pristiPolozka->next;
}
//nakonec vrátíme ukazatel natu nalezenou položku seznamu
return nalezenaPolozka;
}
/**
* Najde polozku seznamu s odpovidajicim jmenem objektu. Vraci NULL, pokud
* takova polozka v seznamu neni.
*/
PolozkaSeznamu *list_find_name(Seznam * sznm, char *name)
{
// jeto zase uplně stejný jako předtim akorátže nebudem hledat nejmenčí id
// ale první výskyt položky který data.name bude stejný
PolozkaSeznamu * pristiPolozka = sznm->first;
while(pristiPolozka)
{
// použijem funkci strcmp z knihovny string.h na dělání porovnání stringů
// (vrací 0 když sou voba stringy stejný) noa když se ména schodujou tak
// položku vrátíme
if( strcmp(name, pristiPolozka->data.name) == 0)
return pristiPolozka;
pristiPolozka = pristiPolozka->next;
}
// pokuď sme došli až sem nóó tak asi jako hledaná položka v seznamu neni
// a podle zadání musíme vrátit null
return NULL;
}
/**
* Uvolneni seznamu.
*/
void list_dtor(Seznam * sznm)
{
//projdem seznam a uděláme že vodstraníme všechny ty položky vobsažený
// furt jeto všecko stejný
PolozkaSeznamu * pristiPolozka = sznm->first;
while(pristiPolozka)
{
//skováme si adresu současný oložky než ji přepišem příští
PolozkaSeznamu * soucasna = pristiPolozka;
pristiPolozka = pristiPolozka->next;
//a tu současnou teďko uvolníme z paměti
free(soucasna);
}
sznm->first = NULL;
}
int main()
{
printf("list_ctor...\n");
Seznam * sznm = list_ctor();
printf("list_empty...\n");
printf("Seznam prazdny: %s\n", isEmpty(sznm) ? "ano" : "ne");
PolozkaSeznamu *item;
Object o1 = {42, "Honza"};
printf("item_ctor...\n");
item = novaPolozka(o1);
printf("list_insert_first...\n");
list_insert_first(sznm, item);
printf("Seznam prazdny: %s\n", isEmpty(sznm) ? "ano" : "ne");
printf("list_count...\n");
printf("Pocet prvku v seznamu: %d\n", list_count(sznm));
Object o2 = {2, "Malem"};
item = novaPolozka(o2);
printf("list_insert_first...\n");
list_insert_first(sznm, item);
Object o3 = {0, "Kralem"};
item = novaPolozka(o3);
printf("list_insert_first...\n");
list_insert_first(sznm, item);
printf("Pocet prvku v seznamu: %d\n", list_count(sznm));
printf("Odstraneni prvniho prvku ze seznamu \n");
list_delete_first(sznm);
printf("Pocet prvku v seznamu: %d\n", list_count(sznm));
// opetovne vlozeni objektu o1
item = novaPolozka(o1);
printf("list_insert_first...\n");
list_insert_first(sznm, item);
printf("list_find_minid...\n");
item = list_find_minid(sznm);
if (item != NULL) {
printf("Polozka s nejmensim identifikatorem: {%d, \"%s\"}\n",
item->data.id, item->data.name);
}
else
printf("Polozka s nejmensim identifikatorem nenalezena\n");
printf("list_find_name...\n");
char* name = "Honza";
item = list_find_name(sznm, name);
if (item != NULL) {
printf("Polozka s daty %s nalezena\n", name);
}
else
printf("Polozka s daty %s nenalezena.\n",name);
printf("list_dtor...\n");
list_dtor(sznm);
printf("Seznam prazdny: %s\n", isEmpty(sznm) ? "ano" : "ne");
return 0;
}
ttssssssssssssssssss zato jako muže učitelskej že nám dal blbou testovací funkci main by sme nato jako mohli ve tři ráno nějak po spuštění hnedka přijít :O :/ :D ;D
v zadání seto po nás chce aby seto jako hlídalo vtý samotný fci todleto takže máš pravdu :D ;D je tam teda potřeba připsat hlídací řádeček na prázdnej list/seznam malej a pak to snad bude uplně dobrý :O :O
takle třeba ta funkce
.
.
.
void list_delete_first(Seznam * sznm)
{
// pokud je první položka null tak nebudem nic vodstraňovat a vrátíme se z funkce/přerušíme ji
if(sznm->first == NULL)return;
// nebo takle
// if(!sznm->first)return;
PolozkaSeznamu * prvni = sznm->first;
PolozkaSeznamu * druha = prvni->next;
free(prvni);
sznm->first = druha;
}
.
.
.
učitelskej línej jeto pořádně naučit a bude jako googlit svý zadání pocelým internetu jóóó?? :O :O :D :D ;D ;D
asi natom stim googlením jako něco bude hele :O :D :D ;D
Tiskni
Sdílej: