V jádře Linux byla nalezena a v upstreamu již byla opravena kritická zranitelnost GhostLock aneb CVE-2026-43499. Lokálnímu uživateli umožňuje získat práva roota a také obejít kontejnerovou izolaci. Zranitelnost existovala v Linuxu 15 let, tj. od roku 2011, od Linuxu verze 2.6.39.
Evropská komise předběžně shledala, že návykový design aplikací Instagram a Facebook od americké společnosti Meta porušuje unijní nařízení o digitálních službách (DSA). Návykový design zahrnuje například takzvané nekonečné posouvání, automatické přehrávání videí, tzv. push notifikace, kdy aplikace uživatele vybízí k návratu do jejího prostředí, či vysoce personalizovaný algoritmus, který rychle pozná, co uživatele baví a snaží
… více »Byla vydána verze 1.97.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Švýcarská společnost Punkt. má nově v nabídce telefon Punkt. MC03. Telefon byl navržen ve Švýcarsku s důrazem na soukromí a digitální suverenitu a vyroben v Německu. V telefonu běží operační systém AphyOS (Apostrophy OS) založený na AOSP (Android Open Source Project) 15. Cena telefonu je 745 eur.
TypeScript (Wikipedie), tj. JavaScript rozšířený o statické typování a další atributy, byl vydán v nové verzi 7.0. Kompilátor byl kvůli výkonu přepsán z TypeScriptu do Go.
Europarlament podpořil pozměněnou verzi výjimky známé jako „chat control 1.0“ umožňující firmám skenovat soukromou komunikaci na internetu kvůli ochraně dětí před zneužitím. Pozměňovací návrhy přijaté europoslanci však počítají s tím, že z výjimky bude vyřazena šifrovaná komunikace. Výjimka přestala platit začátkem dubna poté, co se Evropský parlament a Rada EU nedokázaly shodnout na jejím prodloužení. Rada následně přijala
… více »Nejnovější X.Org X server 21.1.24 a Xwayland 24.1.13 řeší 2 bezpečnostní chyby.
Clement "Clem" Lefebvre publikoval souhrn dění v Linux Mintu za červen 2026. Vypíchnuta je vylepšená podpora Waylandu. Už není považována za experimentální. V příští verzi Linux Mintu, plánována je na Vánoce, bude běh Cinnamonu plně podporován na X11 i Waylandu. V květnu na vývoj Linux Mintu přispělo 611 dárců celkovou částkou 19 612 dolarů. Dalších 2 326 patronů přispělo na Patreonu celkovou částkou 5 334 dolarů.
V Linuxu v KVM byla nalezena a v upstreamu již byla opravena kritická zranitelnost Januscape aneb CVE-2026-53359. Root na hostovaném počítači (virtuální stroj) může obejít izolaci a získat plnou kontrolu nad hostitelským systémem (DoS útok nebo vzdálené spuštění kódu s právy roota). Na obou hlavních architekturách – Intel i AMD. Zranitelnost v Linuxu existovala téměř 16 let (od srpna 2010 do června 2026).
Tribunál Soudního dvora Evropské unie dnes zamítl několik žalob, v nichž se americká společnost Apple ohrazovala proti pravidlům fungování velkých technologických společností na unijním trhu. Applu se nelíbilo, že jeho obchod s aplikacemi a operační systém iOS mají podléhat přísnějším povinnostem jen proto, že Brusel firmu považuje za takzvaného gatekeepera, tedy strážce přístupu.
// C interface
alias extern(C) void function(void*) CallbackFunc;
extern(C) extern void nejaka_c_fce(CallbackFunc func, void* data);
extern(C) extern void cekej_na_callback();
//
class Bla
{
uint[] nejakyData;
this()
{
nejakyData = new uint[1024*1024*10]; // 40M
nejaka_c_fce(&cCallback, cast(void*)this);
}
void callback()
{
// něco tady
}
static extern(C) cCallback(void *data)
{
Bla self = cast(Bla)data;
self.callback();
}
}
// ...
Bla bla;
void main()
{
while (true)
{
bla = new Bla();
cekej_na_callback();
// tahle fce čeká na nějaký data a až dorazí
// tak zavolá ten callback v tomhle samým vlákně,
// pak vrátí
}
}
Něco v tom stylu výše. Referenci na objekt samozřejmě držím stranou, dokud není zavolán callback, takže problém se zrušením objektu by neměl nastat (a ani nenastane, o čemž jsem se přesvědčil přidáním destruktoru).
const(void*)this, tak kód funguje.
import std.stdio;
import core.thread;
//import wayland.callback;
class Callback
{
void delegate(uint) m_callback;
Callback m_next;
uint[] m_lotsOfData;
public this(void delegate(uint) cb)
{
writefln("Callback %s create", cast(void*)this);
m_lotsOfData = new uint[1024*1024*10]; // 40M
writefln("Callback %s alloc done", cast(void*)this);
m_callback = cb;
}
~this()
{
writefln("Callback %s destroy", cast(void*)this);
}
public void call(uint bla)
{
m_callback(bla);
}
}
class Bla
{
Callback m_callbacks;
Callback m_last;
public Callback createCallback(void delegate(uint) cb)
{
Callback ret = new Callback(cb);
if (m_last is null)
m_callbacks = ret;
else
m_last.m_next = ret;
m_last = ret;
return ret;
}
public Callback createCallback(void function(uint) cb)
{
return createCallback( (uint bla) { cb(bla); } );
}
public void run()
{
while (m_callbacks !is null)
{
Callback cb = m_callbacks;
m_callbacks = cb.m_next;
cb.m_next = null;
if (m_callbacks is null)
m_last = null;
cb.call(111);
}
}
}
Bla bla;
void proc(uint serial)
{
writeln("call");
Thread.sleep(dur!("msecs")(10));
bla.createCallback(&proc);
}
void main()
{
bla = new Bla();
bla.createCallback(&proc);
bla.run();
}
/*
Display display;
SyncCallback cb;
void proc(uint serial)
{
writeln("sync");
Thread.sleep(dur!("msecs")(10));
cb = display.sync(&proc);
}
void main()
{
display = new Display(null);
cb = display.sync(&proc);
while (true)
display.dispatch();
}
*/
Řešení dotazu:
Jseš si jistý, že třída v D bude binárně kompatibilní se třídou v C++? Já si myslím, že to zaručeno není:
http//www.digitalmars.com/d/1.0/class.html
The D compiler is free to rearrange the order of fields in a class to optimally pack them in an implementation-defined manner.
Možná to nefunguje z tohoto důvodu:
http://www.digitalmars.com/d/1.0/garbage.html
void* p; ... int x = cast(int)p; // error: undefined behavior
garbage collector v D takové přetypování nedovoluje udělat
Přečti si všechno, co se píše v tom odkazu. Je úplně jedno, jestli přetypováváš na int nebo na instanci nějaké třídy. Navíc garbage collector v D se může kdykoliv rozhodnout přesunout ten objekt v paměti jinam, takže jakýkoliv void pointer ztrácí platnost (což bude ten důvod, proč to padá):
A copying garbage collector can arbitrarily move objects around in memory
Možný workaround by byl získat pointer na referenci místo objektu, ale musel bys zajistit, že ta reference nezanikne a taky to není hezké řešení.
A copying garbage collector can arbitrarily move objects around in memoryTo zní docela zajímavě. Možná by Jardíkovi pomohl odkaz na nějaké howto jak předávat callbacky s odkazem na třídu, protože to při kombinování D a C musí být každodenní use case. Není něco takového? Přecijem je D novější jazyk než C a tudíž se dá počítat, že chce fungovat i ve stávajícím ekosystému.
// Typical C-style callback mechanism; the passed function
// is invoked with the user-supplied context pointer at a
// later point.
extern(C) void addCallback(void function(void*), void*);
// Allocate an object on the GC heap (this would usually be
)// some application-specific context data.
auto context = new Object;
// Make sure that it is not collected even if it is no
// longer referenced from D code (stack, GC heap, …).
GC.addRoot(cast(void*)context);
// Also ensure that a moving collector does not relocate
// the object.
GC.setAttr(cast(void*)context, GC.BlkAttr.NO_MOVE);
// Now context can be safely passed to the C library.
addCallback(&myHandler, cast(void*)context);
extern(C) void myHandler(void* ctx)
{
// Assuming that the callback is invoked only once, the
// added root can be removed again now to allow the GC
// to collect it later.
GC.removeRoot(ctx);
GC.clrAttr(ctx, GC.BlkAttr.NO_MOVE);
auto context = cast(Object)ctx;
// Use context here…
}
Tiskni
Sdílej: