Grafický správce balíčků Myrlyn pro SUSE a openSUSE, původně YQPkg, dospěl do stabilní verze 1.0.0. Postaven je nad libzypp a Qt 6. Projekt začal na SUSE Hack Weeku 24.
Vývojáři se podařilo vytvořit patch pro Wine, díky kterému je možné na linuxovém stroji nainstalovat a spustit Adobe Photoshop (testováno s verzemi Photoshopu PS2021 a PS2025). Dalším patchem se podařilo umožnit dokonce instalaci téměř celého Adobe Creative Cloud Collection 2023, vyjma aplikací Adobe XD a Adobe Fresco. Patch řeší kompatibilitu s windowsovými subsystémy MSHTML - jádrem prohlížeče Internet exporer, a MSXML3 - parserem
… více »Hackeři zaútočili na portál veřejných zakázek a vyřadili ho z provozu. Systém, ve kterém musí být ze zákona sdíleny informace o veřejných zakázkách, se ministerstvo pro místní rozvoj (MMR) nyní pokouší co nejdříve zprovoznit. Úřad o tom informoval na svém webu a na sociálních sítích. Portál slouží pro sdílení informací mezi zadavateli a dodavateli veřejných zakázek.
Javascriptová knihovna jQuery (Wikipedie) oslavila 20. narozeniny, John Resig ji představil v lednu 2006 na newyorském BarCampu. Při této příležitosti byla vydána nová major verze 4.0.0.
Singularity je rootkit ve formě jaderného modulu (Linux Kernel Module), s otevřeným zdrojovým kódem dostupným pod licencí MIT. Tento rootkit je určený pro moderní linuxová jádra 6.x a poskytuje své 'komplexní skryté funkce' prostřednictvím hookingu systémových volání pomocí ftrace. Pro nadšence je k dispozici podrobnější popis rootkitu na blogu autora, případně v článku na LWN.net. Projekt je zamýšlen jako pomůcka pro bezpečnostní experty a výzkumníky, takže instalujte pouze na vlastní nebezpečí a raději pouze do vlastních strojů 😉.
Iconify je seznam a galerie kolekcí vektorových open-source ikon, ke stažení je přes 275000 ikon z více jak dvou set sad. Tento rovněž open-source projekt dává vývojářům k dispozici i API pro snadnou integraci svobodných ikon do jejich projektů.
Dle plánu certifikační autorita Let's Encrypt nově vydává také certifikáty s šestidenní platností (160 hodin) s možností vystavit je na IP adresu.
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 14.0 (Mastodon). Forgejo je fork Gitei.
Just the Browser je projekt, 'který vám pomůže v internetovém prohlížeči deaktivovat funkce umělé inteligence, telemetrii, sponzorovaný obsah, integraci produktů a další nepříjemnosti' (repozitář na GitHubu). Využívá k tomu skrytá nastavení ve webových prohlížečích, určená původně pro firmy a organizace ('enterprise policies'). Pod linuxem je skriptem pro automatickou úpravu nastavení prozatím podporován pouze prohlížeč Firefox.
Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.18. Díky 174 přispěvatelům.
#include <stdbool.h>
...
typedef struct {
int sprite;
int walk_speed;
int ticks;
bool revealed = false;
int hp;
int an;
int dn;
} Enemy;
void initEnemy(Enemy *e)
{
e->sprite = 4;
e->walk_speed = 2;
e->ticks = 3;
e->revealed = true;
e->hp = 4;
e->an = 5;
e->dn = 6;
}
int main()
{
FILE *f = NULL;
Enemy e;
initEnemy(&e);
...
fwrite(&e, sizeof(Enemy), 1, f);
...
Kompiluji pomoci gcc, všechno funguje jak má, kompilátor si nestěžuje, nicméně když prográmek proženu přes valgrind, začne křičet že ukládám neinicializovanou proměnnou:
==5347== 1 errors in context 1 of 1: ==5347== Syscall param write(buf) points to uninitialised byte(s) ==5347== at 0x410D0B3: __write_nocancel (in /lib/libc-2.17.so) ==5347== by 0x40B2FD0: _IO_file_write@@GLIBC_2.1 (in /lib/libc-2.17.so) ==5347== by 0x40B2EC4: new_do_write (in /lib/libc-2.17.so) ==5347== by 0x405B7E2: (below main) (in /lib/libc-2.17.so) ==5347== Address 0x403100d is not stack'd, malloc'd or (recently) free'd ==5347== Uninitialised value was created by a stack allocation ==5347== at 0x8048501: main (in /home/phaal/c_progs/loadsave)Způsobuje to ona Boolovska proměnná: bool revealed, pokud ji odstraním, nebo zaměním za int, tak si valgrind přestane stěžovat. Netuší někdo proč tomu tak je? Resp. kde dělám chybu, jak bych to mohl opravit? Dík
Řešení dotazu:
true Expands to the integer constant 1. false Expands to the integer constant 0.Každopádně, pokud použiju bit field, např.
unsigned int revealed :1, tak valgrind taky křičí že mi tam lítaji neinicializované bity.
Nejspíš budu muset použít celý 4 bajtový int. Eventuálně si ho můžu sám namakrovat na bool/true/false.
bool v stdbool.h je DEFINE na C99 typ _Bool.
To je číselný typ, který pojme jen a pouze hodnoty 0 a 1.
Na mém systému je sizeof(_Bool) 1, stejně jako sizeof(char), sizeof(int) tu mám 4.
To, že false je nějaká číselná konstanta (integer constant) neznamená,
že je typu int. 35U je třeba taky číselná konstanta,
ale typu unsigned int.
K tvému problému s valgrindem, ten je, jak ti již pověděl někdo přede mnou,
opravdu způsoben paddingem ve struktuře. Bude asi za tím boolem,
např. 3 bajty, aby následující int byl zarovnán (např. na 4B). Valgrind 'ví', že jsi
do toho paddingu nic nezapsal, ale fwrite() tu strukturu zapisuje včetně těch padding bajtů - ty
mají nějakou hodnotu, na kterou se nelze spolehnout. Můžou tam být nuly, ale třeba i část tvého hesla,
které v té aplikaci zadáváš
Řešením je strukturu zapsat do souboru prvek po prvku, nebo třeba
před manipulací zavolat nějaký memset(). Zápis prvek po prvku může být pomalejší ... i když fwrite() používá buffer,
může tam být nějaký zámek, overhead volání fce, ... závisí na aplikaci, ale u práci se soubory
to spíš bude brzdit disk, než volání fce. Zápis každý prvek zvlášť (když to zkombinuješ s intN_t typy)
by mohlo být 'lepší', protože to bude více (ehm, tak trochu) multiplatformní.
ty mají nějakou hodnotu, na kterou se nelze spolehnout. Můžou tam být nuly, ale třeba i část tvého hesla, které v té aplikaci zadávášToto pouze umlci valgrind, ale do souboru se stejne mohou zapsat libovolna data v paddingu, protoze po jakemkoliv zapisu do prvku struktury je hodnota paddingu nedefinovana. Prekladac tam klidne muze zapsat zpatky vase heslo pripadne memset odoptimalizovat uplne pryc, pokud pak nastavujete vsechny prvky struktury.Řešením je strukturu zapsat do souboru prvek po prvku, nebo třeba před manipulací zavolat nějaký memset().
Tiskni
Sdílej: