<?xml version="1.0" encoding="utf-8"?>
<!--RSS generated by Flaimo.com RSS Builder [2026-08-11 12:10:19]-->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"><channel><docs>http://austingroupbugs.net/</docs><link>http://austingroupbugs.net/</link><description><![CDATA[Austin Group Issue Tracker - Issues]]></description><title>Austin Group Issue Tracker - Issues</title><image><title>Austin Group Issue Tracker - Issues</title><url>http://austingroupbugs.net/images/AG_HEADER.png</url><link>http://austingroupbugs.net/</link><description><![CDATA[Austin Group Issue Tracker - Issues]]></description></image><language>en</language><category>All Projects</category><ttl>10</ttl><dc:language>en</dc:language><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><item><title>0001992: Add getexepath() to retrieve the absolute pathname of the current process executable image.</title><author></author><link>http://austingroupbugs.net/view.php?id=1992</link><description><![CDATA[There is currently no standardized, portable mechanism in POSIX to retrieve the absolute pathname of the executable file currently executing the calling process. Runtimes, language interpreters, and asset loaders must resort to highly unportable, platform-specific mechanisms. &lt;br /&gt;
&lt;br /&gt;
- Linux relies on parsing the &quot;/proc/self/exe&quot; symlink or using `getauxval(AT_EXECFN)`.&lt;br /&gt;
- FreeBSD and NetBSD use a sysctl interface via KERN_PROC_PATHNAME.&lt;br /&gt;
- SunOS implements getexecname().&lt;br /&gt;
- macOS implements a non-POSIX _NSGetExecutablePath() function.&lt;br /&gt;
&lt;br /&gt;
Others like OpenBSD force us to rely on argv[0] and (if the process didn't start with an absolute path) scanning the PATH environment variable, which is fundamentally unsafe and unreliable (someone else in the PATH with the same name appearing early is picked up). Furthermore, the parent process can easily manipulate or empty argv and envp during an execve() call, leaving the child completely unable to safely determine its own physical location. &lt;br /&gt;
&lt;br /&gt;
Adding a native, safe API to POSIX eliminates immense cross-platform boilerplate across programming frameworks and toolchains that require explicit binary path auditing.]]></description><category>System Interfaces</category><pubDate>Tue, 11 Aug 2026 11:38:46 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1992</guid><comments>http://austingroupbugs.net/view.php?id=1992#bugnotes</comments></item><item><title>0001995: Add SHM_ANON to shm_open()</title><author></author><link>http://austingroupbugs.net/view.php?id=1995</link><description><![CDATA[SHM_ANON can be used to create an unnamed shared memory object, which will be automatically destroyed when last reference to it is removed. It is mainly useful for avoiding potential conflicts with already existing shared memory objects, hiding the object from other processes and making the use of shm_unlink unnecessary since the object has no name.&lt;br /&gt;
&lt;br /&gt;
This extension is known to be implemented at least by QNX and FreeBSD. Linux provides similar memfd_create() interface, which can be used to mimic SHM_ANON.&lt;br /&gt;
&lt;br /&gt;
See also: &lt;a href=&quot;https://github.com/lassik/shm_open_anon&quot; rel=&quot;noopener&quot;&gt;https://github.com/lassik/shm_open_anon&lt;/a&gt;]]></description><category>System Interfaces</category><pubDate>Mon, 10 Aug 2026 22:10:11 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1995</guid><comments>http://austingroupbugs.net/view.php?id=1995#bugnotes</comments></item><item><title>0001949: Restore the traditional realloc(3) specification</title><author></author><link>http://austingroupbugs.net/view.php?id=1949</link><description><![CDATA[Name&lt;br /&gt;
	alx-p0001r0 - Restore the traditional realloc(3) specification&lt;br /&gt;
&lt;br /&gt;
Category&lt;br /&gt;
	Remove UB.&lt;br /&gt;
&lt;br /&gt;
[ADMINISTRATOR EDIT: removed personal email addresses from Description]&lt;br /&gt;
&lt;br /&gt;
History&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.alejandro-colomar.es/src/alx/alx/std/posix/alx-p0001.git/&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.alejandro-colomar.es/src/alx/alx/std/posix/alx-p0001.git/&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
	alx-0029r0 (2025-06-17):&lt;br /&gt;
	-  Initial draft.&lt;br /&gt;
&lt;br /&gt;
	alx-0029r1 (2025-06-20):&lt;br /&gt;
	-  Full rewrite after the recent glibc discussion.&lt;br /&gt;
&lt;br /&gt;
	alx-0029r2 (2025-06-21):&lt;br /&gt;
	-  Remove CC.  Add CC.&lt;br /&gt;
	-  wfix.&lt;br /&gt;
	-  Drop quote.&lt;br /&gt;
	-  Add a few more principles&lt;br /&gt;
	-  Clarify why ENOMEM is used in this proposal, and make it&lt;br /&gt;
	   optional.&lt;br /&gt;
	-  Mention exceptional leak in code checking (size != 0).&lt;br /&gt;
	-  Clarify that part of the description of realloc can be&lt;br /&gt;
	   editorially removed after this change.&lt;br /&gt;
&lt;br /&gt;
	alx-0029r3 (2025-06-23):&lt;br /&gt;
	-  Fix diff missing line.&lt;br /&gt;
	-  Remove ENOMEM from the proposal.&lt;br /&gt;
	-  Clarify that ENOMEM should be retained by platforms already&lt;br /&gt;
	   using it.&lt;br /&gt;
	-  Add mention that LLVM's address sanitizer will catch the leak&lt;br /&gt;
	   mentioned in r2.&lt;br /&gt;
	-  Add links to real bugs (including an RCE bug).&lt;br /&gt;
&lt;br /&gt;
	alx-0029r4 (2025-06-24):&lt;br /&gt;
	-  Use a better link for the Whatsapp RCE.&lt;br /&gt;
	-  s/Description/Rationale/&lt;br /&gt;
	-  wfix&lt;br /&gt;
	-  Mention that glibc &lt;2.1.1 had the BSD behavior.&lt;br /&gt;
	-  Add footnote that realloc(3) may fail while shrinking.&lt;br /&gt;
&lt;br /&gt;
	alx-0029r5 (2025-06-26):&lt;br /&gt;
	-  It was glibc 2.1.1 that broke it, not glibc 2.2.&lt;br /&gt;
	-  wfix&lt;br /&gt;
	-  Mention in the footnote that the pointer may change.&lt;br /&gt;
	-  Document why not go the other way around.  It was explained&lt;br /&gt;
	   several times during discussion, but people keep suggesting&lt;br /&gt;
	   it.&lt;br /&gt;
&lt;br /&gt;
	alx-0029r6 (2025-06-27; n3621):&lt;br /&gt;
	-  Clarify that the paragraph about what happens when the size&lt;br /&gt;
	   is zero refers to when the total size is zero (for calloc(3)&lt;br /&gt;
	   that is nmemb*size).&lt;br /&gt;
	-  s/Unix V7/V7 Unix/&lt;br /&gt;
	-  tfix.&lt;br /&gt;
	-  wfix.&lt;br /&gt;
&lt;br /&gt;
	Brno meeting (2025-08-27):&lt;br /&gt;
	-  9/13/6&lt;br /&gt;
	-  Along the lines: 21/1/5&lt;br /&gt;
	-  People recognized in the dinner after the meeting, and in the&lt;br /&gt;
	   reflector, and in corridor discussions, that they hadn't&lt;br /&gt;
	   understood the paper, and that it was more well thought than&lt;br /&gt;
	   they initially thought.  They would change their vote to be&lt;br /&gt;
	   in favour with this proposal.&lt;br /&gt;
&lt;br /&gt;
	alx-0029r7 (2025-09-21):&lt;br /&gt;
	-  Add link.&lt;br /&gt;
&lt;br /&gt;
	alx-p0001r0 (2025-09-21):&lt;br /&gt;
	-  Fork POSIX proposal from ISO C proposal.&lt;br /&gt;
&lt;br /&gt;
See also&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.alejandro-colomar.es/src/alx/alx/wg14/alx-0069.git/&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.alejandro-colomar.es/src/alx/alx/wg14/alx-0069.git/&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://nabijaczleweli.xyz/content/blogn_t/017-malloc0.html&gt;&quot; rel=&quot;noopener&quot;&gt;https://nabijaczleweli.xyz/content/blogn_t/017-malloc0.html&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://sourceware.org/pipermail/libc-alpha/1999-April/000956.html&gt;&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/pipermail/libc-alpha/1999-April/000956.html&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://inbox.sourceware.org/libc-alpha/nbyurzcgzgd5rdybbi4no2kw5grrc32k63svf7oq73nfcbus5r@77gry66kpqfr/&gt;&quot; rel=&quot;noopener&quot;&gt;https://inbox.sourceware.org/libc-alpha/nbyurzcgzgd5rdybbi4no2kw5grrc32k63svf7oq73nfcbus5r@77gry66kpqfr/&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://inbox.sourceware.org/libc-alpha/20241019014002.3684656-1-siddhesh@sourceware.org/T/#u&gt;&quot; rel=&quot;noopener&quot;&gt;https://inbox.sourceware.org/libc-alpha/20241019014002.3684656-1-siddhesh@sourceware.org/T/#u&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://inbox.sourceware.org/libc-alpha/qukfe5yxycbl5v7ooskvqdnm3au3orohbx4babfltegi47iyly@or6dgf7akeqv/T/#u&gt;&quot; rel=&quot;noopener&quot;&gt;https://inbox.sourceware.org/libc-alpha/qukfe5yxycbl5v7ooskvqdnm3au3orohbx4babfltegi47iyly@or6dgf7akeqv/T/#u&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://github.com/bminor/glibc/commit/7c2b945e1fd64e0a5a4dbd6ae6592a7314dcd4b5&gt;&quot; rel=&quot;noopener&quot;&gt;https://github.com/bminor/glibc/commit/7c2b945e1fd64e0a5a4dbd6ae6592a7314dcd4b5&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://github.com/llvm/llvm-project/issues/113065&gt;&quot; rel=&quot;noopener&quot;&gt;https://github.com/llvm/llvm-project/issues/113065&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.austingroupbugs.net/view.php?id=400&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.austingroupbugs.net/view.php?id=400&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.austingroupbugs.net/view.php?id=526&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.austingroupbugs.net/view.php?id=526&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.austingroupbugs.net/view.php?id=688&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.austingroupbugs.net/view.php?id=688&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://sourceware.org/bugzilla/show_bug.cgi?id=12547&gt;&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/bugzilla/show_bug.cgi?id=12547&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_400.htm&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_400.htm&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.open-std.org/jtc1/sc22/wg14/www/docs/n868.htm&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.open-std.org/jtc1/sc22/wg14/www/docs/n868.htm&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2438.htm&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2438.htm&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2464.pdf&gt;&quot; rel=&quot;noopener&quot;&gt;https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2464.pdf&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/functions/realloc.html&gt;&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/functions/realloc.html&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/functions/realloc.html&gt;&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/functions/realloc.html&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120744&gt;&quot; rel=&quot;noopener&quot;&gt;https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120744&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://lore.kernel.org/lkml/20220213182443.4037039-1-keescook@chromium.org/&gt;&quot; rel=&quot;noopener&quot;&gt;https://lore.kernel.org/lkml/20220213182443.4037039-1-keescook@chromium.org/&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/&gt;&quot; rel=&quot;noopener&quot;&gt;https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/&gt;&lt;/a&gt;&lt;br /&gt;
	&lt;&lt;a href=&quot;https://gbhackers.com/whatsapp-double-free-vulnerability/&gt;&quot; rel=&quot;noopener&quot;&gt;https://gbhackers.com/whatsapp-double-free-vulnerability/&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Rationale&lt;br /&gt;
	The specification of realloc(3) has been problematic since the&lt;br /&gt;
	very first standards, even before ISO C.  The wording has&lt;br /&gt;
	changed significantly, trying to forcedly permit implementations&lt;br /&gt;
	to return a null pointer when the requested size is zero.  This&lt;br /&gt;
	originated from the intent of banning zero-sized objects from&lt;br /&gt;
	the language in C89, but that never worked well in&lt;br /&gt;
	retrospective, as we can see from the fallout.&lt;br /&gt;
&lt;br /&gt;
	None of the specifications have been good, and C23 finally gave&lt;br /&gt;
	up and made it undefined behavior.&lt;br /&gt;
&lt;br /&gt;
	The problem is not only theoretical.  Programmers don't know how&lt;br /&gt;
	to use realloc(3) correctly, and have written weird code in&lt;br /&gt;
	their attempts.  This has resulted in a lot of non-sensical code&lt;br /&gt;
	in configure scripts[1], and even bugs in actual programs[2].&lt;br /&gt;
&lt;br /&gt;
	[1] &lt;&lt;a href=&quot;https://codesearch.debian.net/search?q=%5Cbrealloc%5B+%5Ct%5D*%5B%28%5D%5B%5E%2C%5D*%2C%5B+%5Ct%5D0%5B%29%5D&amp;literal=0&gt;&quot; rel=&quot;noopener&quot;&gt;https://codesearch.debian.net/search?q=%5Cbrealloc%5B+%5Ct%5D*%5B%28%5D%5B%5E%2C%5D*%2C%5B+%5Ct%5D0%5B%29%5D&amp;literal=0&gt;&lt;/a&gt;&lt;br /&gt;
	[2] &lt;&lt;a href=&quot;https://lore.kernel.org/lkml/20220213182443.4037039-1-keescook@chromium.org/&gt;&quot; rel=&quot;noopener&quot;&gt;https://lore.kernel.org/lkml/20220213182443.4037039-1-keescook@chromium.org/&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
	In some cases, this non-sensical code has resulted in RCEs[3].&lt;br /&gt;
&lt;br /&gt;
	[3] &lt;&lt;a href=&quot;https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/&gt;&quot; rel=&quot;noopener&quot;&gt;https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
	However, this doesn't need to be like that.  The traditional&lt;br /&gt;
	implementation of realloc(3), present in V7 Unix, inherited by&lt;br /&gt;
	the BSDs, and currently available in a range of systems,&lt;br /&gt;
	including musl libc, doesn't have any issues regarding zero-size&lt;br /&gt;
	allocations.  glibc --which uses an independent implementation&lt;br /&gt;
	rather than a Unix derivative-- also had this behavior&lt;br /&gt;
	originally; it changed to the current behavior in 1999&lt;br /&gt;
	(glibc 2.1.1), only for compatibility with C89, even though&lt;br /&gt;
	ironically C99 was released soon after and removed the text that&lt;br /&gt;
	glibc was trying to comply with, and introduced some new text&lt;br /&gt;
	that was very confusing, and one of its interpretations would&lt;br /&gt;
	make the new glibc behavior non-conforming.&lt;br /&gt;
&lt;br /&gt;
	Code written for platforms returning a null pointer can be&lt;br /&gt;
	migrated to platforms returning non-null, without significant&lt;br /&gt;
	issues.&lt;br /&gt;
&lt;br /&gt;
	There are two kinds of code that call realloc(p,0).  One&lt;br /&gt;
	hard-codes the 0, and is used as a replacement of free(p).  This&lt;br /&gt;
	code ignores the return value, since it's unimportant.  This&lt;br /&gt;
	code currently produces a leak of 0 bytes plus associated&lt;br /&gt;
	metadata on platforms such as musl libc, where it returns a&lt;br /&gt;
	non-null pointer.  However, assuming that there are programs&lt;br /&gt;
	written with the knowledge that they won't ever be run on such&lt;br /&gt;
	platforms, we should take care of that, and make sure they don't&lt;br /&gt;
	leak.  A way of accomplishing this would be to recommend&lt;br /&gt;
	implementations to issue a diagnostic when realloc(3) is called&lt;br /&gt;
	with a hardcoded zero.  This is only an informal recommendation&lt;br /&gt;
	made by this proposal, as this is a matter of QoI, and the&lt;br /&gt;
	standard shouldn't say anything about it.  This would prevent&lt;br /&gt;
	this class of minor leaks.&lt;br /&gt;
&lt;br /&gt;
	Moreover, in glibc, realloc(p,0) may return non-null, in the&lt;br /&gt;
	case where p is NULL, so code must already take that into&lt;br /&gt;
	account, and thus code that simply takes realloc(p,0) as a&lt;br /&gt;
	synonym of free(p) is already leaky, as free(NULL) is a no-op,&lt;br /&gt;
	but realloc(NULL,0) allocates 0 bytes.&lt;br /&gt;
&lt;br /&gt;
	The other kind of code is in algorithms that realloc(3) an&lt;br /&gt;
	arbitrary size, which might eventually be zero.  This gets more&lt;br /&gt;
	complex.&lt;br /&gt;
&lt;br /&gt;
	Here's the code that should be written for AIX or glibc:&lt;br /&gt;
&lt;br /&gt;
		errno = 0;&lt;br /&gt;
		new = realloc(old, size);&lt;br /&gt;
		if (new == NULL) {&lt;br /&gt;
			if (errno == ENOMEM)&lt;br /&gt;
				free(old);&lt;br /&gt;
			goto fail;&lt;br /&gt;
		}&lt;br /&gt;
		...&lt;br /&gt;
		free(new);&lt;br /&gt;
&lt;br /&gt;
	Failing to check for ENOMEM in these platforms before freeing&lt;br /&gt;
	the old pointer would result in a double-free.  If the program&lt;br /&gt;
	decides to continue using the old pointer instead of freeing it,&lt;br /&gt;
	it would result in a use-after-free.&lt;br /&gt;
&lt;br /&gt;
	In the platforms where realloc(p,0) returns non-null, such as&lt;br /&gt;
	the BSDs or musl libc, it is simpler to handle it:&lt;br /&gt;
&lt;br /&gt;
		new = realloc(old, size);&lt;br /&gt;
		if (new == NULL) {  // errno is ENOMEM&lt;br /&gt;
			free(old);&lt;br /&gt;
			goto fail;&lt;br /&gt;
		}&lt;br /&gt;
		...&lt;br /&gt;
		free(new);&lt;br /&gt;
&lt;br /&gt;
	Whenever the result is a null pointer, these platforms are&lt;br /&gt;
	reporting an ENOMEM error, and thus it is superfluous to check&lt;br /&gt;
	errno there.&lt;br /&gt;
&lt;br /&gt;
	Most code is written in this way, even if run on platforms&lt;br /&gt;
	returning a null pointer.  This is because most programmers are&lt;br /&gt;
	just unaware of this problem.  Part of the reason is also that&lt;br /&gt;
	returning a non-null pointer with zero bytes is the natural&lt;br /&gt;
	extension of the behavior, which is what programmers intuitively&lt;br /&gt;
	expect from libc; that is, if realloc(p,3) allocates 3 bytes,&lt;br /&gt;
	r(p,2) allocates two bytes, and r(p,1) allocates one byte, it is&lt;br /&gt;
	natural by induction to expect that r(p,0) will allocate zero&lt;br /&gt;
	bytes.  Most algorithms naturally extend to 0 just fine, and&lt;br /&gt;
	special casing 0 is artificial.&lt;br /&gt;
&lt;br /&gt;
	If the realloc(3) specification were changed to require that&lt;br /&gt;
	realloc(p,0) returns non-null on success, and that realloc(p,0)&lt;br /&gt;
	only fails when out-of-memory (and assuming the implementations&lt;br /&gt;
	will continue setting errno to ENOMEM), then code written for&lt;br /&gt;
	AIX or glibc would continue working just fine, since the errno&lt;br /&gt;
	check would be redundant with the null check.  Simply, the&lt;br /&gt;
	conditional (errno == ENOMEM) would always be true when&lt;br /&gt;
	(new == NULL).&lt;br /&gt;
&lt;br /&gt;
	Then, there are non-POSIX platforms that don't set ENOMEM.  In&lt;br /&gt;
	those platforms, code might do this:&lt;br /&gt;
&lt;br /&gt;
		new = realloc(old, size);&lt;br /&gt;
		if (new == NULL) {&lt;br /&gt;
			if (size != 0)&lt;br /&gt;
				free(old);&lt;br /&gt;
			goto fail;&lt;br /&gt;
		}&lt;br /&gt;
		...&lt;br /&gt;
		free(new);&lt;br /&gt;
&lt;br /&gt;
	That code would continue working with this proposal, except for&lt;br /&gt;
	a very rare corner case, in which it would leak.  In the normal&lt;br /&gt;
	case, (size != 0) would never be true under (new == NULL),&lt;br /&gt;
	because a reallocation of 0 bytes would almost always succeed,&lt;br /&gt;
	and thus not return a null pointer under this proposal.&lt;br /&gt;
	However, in some cases, the system might not find space even for&lt;br /&gt;
	the small metadata needed for a 0-byte allocation.  In such&lt;br /&gt;
	case, the (size != 0) conditional would prevent deallocating&lt;br /&gt;
	'old', and thus cause a memory leak.  This case is exceptional&lt;br /&gt;
	enough that it shouldn't stop us from fixing realloc(3).&lt;br /&gt;
	Anyway, on an out-of-memory case, the program is likely to&lt;br /&gt;
	terminate rather soon, so the issue is even less likely to have&lt;br /&gt;
	an impact on any existing programs.  Also, LLVM's address&lt;br /&gt;
	sanitizer will soon able to catch such a leak:&lt;br /&gt;
	&lt;&lt;a href=&quot;https://github.com/llvm/llvm-project/issues/113065&gt;&quot; rel=&quot;noopener&quot;&gt;https://github.com/llvm/llvm-project/issues/113065&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
	This proposal makes handling of realloc(3) as straightforward as&lt;br /&gt;
	one would expect, with only two states: success or error.  There&lt;br /&gt;
	are no in-between states.&lt;br /&gt;
&lt;br /&gt;
	The resulting wording in the standard is also much simpler, as&lt;br /&gt;
	it doesn't need to define so many special cases.&lt;br /&gt;
&lt;br /&gt;
	For consistency, all the other allocation functions are updated&lt;br /&gt;
	to both return a null pointer on error, and use consistent&lt;br /&gt;
	wording.&lt;br /&gt;
&lt;br /&gt;
    Why not go the other way around?&lt;br /&gt;
	Some people keep asking why not go the other way around: why not&lt;br /&gt;
	force the BSDs and musl to return a null pointer if size is 0.&lt;br /&gt;
	This would result in double-free and use-after-free bugs, which&lt;br /&gt;
	can result in RCE vulnerabilities (remote code execution), which&lt;br /&gt;
	is clearly unacceptable.&lt;br /&gt;
&lt;br /&gt;
	Consider this code, which is the usual code for calling&lt;br /&gt;
	realloc(3) in such systems:&lt;br /&gt;
&lt;br /&gt;
		new = realloc(old, size);&lt;br /&gt;
		if (new == NULL) {&lt;br /&gt;
			free(old);&lt;br /&gt;
			goto fail;&lt;br /&gt;
		}&lt;br /&gt;
		...&lt;br /&gt;
		free(new);&lt;br /&gt;
&lt;br /&gt;
	If realloc(p,0) would return a null pointer and free the old&lt;br /&gt;
	block, then the third line would be a double-free bug.&lt;br /&gt;
&lt;br /&gt;
Prior art&lt;br /&gt;
    gnulib&lt;br /&gt;
	gnulib provides the realloc-posix module, which aims to wrap the&lt;br /&gt;
	system realloc(3) and reallocarray(3) functions so that they&lt;br /&gt;
	behave in a POSIX-complying manner.&lt;br /&gt;
&lt;br /&gt;
	It previously behaved like glibc.  After I reported that it was&lt;br /&gt;
	non-conforming to POSIX, we discussed the best way forward,&lt;br /&gt;
	which we agreed was the same direction that this paper is&lt;br /&gt;
	proposing now for C2y.  The implementation was changed in&lt;br /&gt;
&lt;br /&gt;
		gnulib.git d884e6fc4a60 (2024-11-04; &quot;realloc-posix: realloc (..., 0) now returns nonnull&quot;)&lt;br /&gt;
&lt;br /&gt;
	There have been no regression reports since then, as we&lt;br /&gt;
	expected.&lt;br /&gt;
&lt;br /&gt;
    V7 Unix, BSD&lt;br /&gt;
	The proposed behavior is the one endorsed by Doug McIlroy, the&lt;br /&gt;
	author of the original implementation of realloc(3) in V7 Unix,&lt;br /&gt;
	and also present in the BSDs.&lt;br /&gt;
&lt;br /&gt;
    glibc &lt;= 2.1&lt;br /&gt;
	glibc was implemented originally to return non-null.  It was&lt;br /&gt;
	only in 1999, and purely to comply with the standards --with no&lt;br /&gt;
	requests by users to do so--, that the glibc maintainers decided&lt;br /&gt;
	to switch to the current behavior.&lt;br /&gt;
&lt;br /&gt;
Design decisions&lt;br /&gt;
	This change needs two changes, which can be applied all at once,&lt;br /&gt;
	or in separate steps.&lt;br /&gt;
&lt;br /&gt;
	The first step would make realloc(p,s) be consistent with&lt;br /&gt;
	free(p) and malloc(s), including when p is a null pointer, when&lt;br /&gt;
	s is zero, and also when both corner cases happen at the same&lt;br /&gt;
	time.  This change would already turn the implementations where&lt;br /&gt;
	malloc(0) returns non-null into the end goal we have.  This&lt;br /&gt;
	would require changes to (at least) the following&lt;br /&gt;
	implementations: glibc, Bionic, Windows.&lt;br /&gt;
&lt;br /&gt;
	The second step would be to require that malloc(0) returns a&lt;br /&gt;
	non-null pointer.  This would require changes to (at least) the&lt;br /&gt;
	following implementations: AIX.&lt;br /&gt;
&lt;br /&gt;
	This proposal has merged all steps into a single proposal.&lt;br /&gt;
&lt;br /&gt;
Caveats&lt;br /&gt;
    n?n:1&lt;br /&gt;
	Code written in the near future should be careful, in case it&lt;br /&gt;
	can run on older systems that are not fixed to comply with this&lt;br /&gt;
	stricter specification.  Thus, code written in the near future&lt;br /&gt;
	should call realloc(3) similar to this:&lt;br /&gt;
&lt;br /&gt;
		realloc(p, n?n:1);&lt;br /&gt;
&lt;br /&gt;
	When all existing implementations are fixed to comply with this&lt;br /&gt;
	stricter specification, that workaround can be removed.&lt;br /&gt;
&lt;br /&gt;
    ENOMEM&lt;br /&gt;
	Existing implementations that set errno to ENOMEM must continue&lt;br /&gt;
	doing so when the input pointer is not freed.  If they didn't,&lt;br /&gt;
	code that is currently portable to all POSIX systems&lt;br /&gt;
&lt;br /&gt;
		errno = 0;&lt;br /&gt;
		new = realloc(old, size);&lt;br /&gt;
		if (new == NULL) {&lt;br /&gt;
			if (errno == ENOMEM)&lt;br /&gt;
				free(old);&lt;br /&gt;
			goto fail;&lt;br /&gt;
		}&lt;br /&gt;
		...&lt;br /&gt;
		free(new);&lt;br /&gt;
&lt;br /&gt;
	would leak on error.&lt;br /&gt;
&lt;br /&gt;
	Since it is currently impossible to write code today that is&lt;br /&gt;
	portable to arbitrary C17 systems, this is not an issue in&lt;br /&gt;
	ISO C.&lt;br /&gt;
&lt;br /&gt;
		-  New code written for C2y will only need to check for&lt;br /&gt;
		   NULL to detect errors.&lt;br /&gt;
&lt;br /&gt;
		-  Code written for specific C17 and older platforms&lt;br /&gt;
		   that don't set errno will continue to work for those&lt;br /&gt;
		   specific platforms.&lt;br /&gt;
&lt;br /&gt;
		-  Code written for POSIX.1-2024 and older platforms&lt;br /&gt;
		   will continue working on POSIX C2y platforms,&lt;br /&gt;
		   assuming that POSIX will continue mandating ENOMEM.&lt;br /&gt;
&lt;br /&gt;
		-  Code written for POSIX.1-2024 and older will not be&lt;br /&gt;
		   able to be run on non-POSIX C2y platforms, but that&lt;br /&gt;
		   could be expected.&lt;br /&gt;
&lt;br /&gt;
	The only important thing is that platforms that did set ENOMEM&lt;br /&gt;
	should continue setting it, to avoid introducing leaks.]]></description><category>System Interfaces</category><pubDate>Mon, 10 Aug 2026 08:55:56 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1949</guid><comments>http://austingroupbugs.net/view.php?id=1949#bugnotes</comments></item><item><title>0001994: exp() assumes default rounding</title><author></author><link>http://austingroupbugs.net/view.php?id=1994</link><description><![CDATA[If the correct value would cause overflow, a range error shall occur&lt;br /&gt;
and exp(), expf(), and expl() shall return the value of the macro&lt;br /&gt;
HUGE_VAL, HUGE_VALF, and HUGE_VALL, respectively.]]></description><category>System Interfaces</category><pubDate>Wed, 29 Jul 2026 08:40:41 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1994</guid><comments>http://austingroupbugs.net/view.php?id=1994#bugnotes</comments></item><item><title>0001984: Ambiguous requirements for command -v on printing absolute pathnames</title><author></author><link>http://austingroupbugs.net/view.php?id=1984</link><description><![CDATA[The requirements for command -v read:&lt;br /&gt;
&lt;br /&gt;
- Executable utilities, regular built-in utilities, command_names including a &lt;slash&gt; character, and any implementation-provided functions that are found using the PATH variable (as described in 2.9.1.4 Command Search and Execution), shall be written as absolute pathnames.&lt;br /&gt;
&lt;br /&gt;
This is ambiguous as to whether &quot;that are found using the PATH variable&quot; applies to &quot;Executable utilities, regular built-in utilities, command_names including a &lt;slash&gt; character, and any implementation-provided functions&quot;, or only to &quot;any implementation-provided functions&quot;.&lt;br /&gt;
&lt;br /&gt;
Given that &quot;command_names including a &lt;slash&gt; character&quot; are never looked up using the PATH variable (as pointed out by Herbert Xu on the dash mailing list), the intent must be that &quot;that are found using the PATH variable&quot; applies only to &quot;any implementation-provided functions&quot;, but at least one shell (bash) does not currently write command_names including a &lt;slash&gt; character as absolute pathnames, even in POSIX mode, and in my opinion, the current text of the standard does not say it should.]]></description><category>Shell and Utilities</category><pubDate>Wed, 29 Jul 2026 07:19:22 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1984</guid><comments>http://austingroupbugs.net/view.php?id=1984#bugnotes</comments></item><item><title>0001993: pthread_create() should allow failure with ENOMEM, not just EAGAIN</title><author></author><link>http://austingroupbugs.net/view.php?id=1993</link><description><![CDATA[pthread_create() is currently defined to allow EAGAIN or EPERM. while _some_ resource issues fit EAGAIN, others do not warrant a retry loop. glibc and bionic both want to return ENOMEM in particular as an unretriable failure.]]></description><category>System Interfaces</category><pubDate>Tue, 28 Jul 2026 08:55:40 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1993</guid><comments>http://austingroupbugs.net/view.php?id=1993#bugnotes</comments></item><item><title>0001973: awk "numeric string " origins</title><author></author><link>http://austingroupbugs.net/view.php?id=1973</link><description><![CDATA[The awk specification (&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/awk.html#tag_20_06_13_02&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/awk.html#tag_20_06_13_02&lt;/a&gt;) has:&lt;br /&gt;
&lt;br /&gt;
&lt;&lt;&lt;&lt;br /&gt;
 A string value shall be considered a numeric string if it comes from one of the following:&lt;br /&gt;
&lt;br /&gt;
     1. Field variables&lt;br /&gt;
     2. Input from the getline() function&lt;br /&gt;
     3. FILENAME&lt;br /&gt;
     4. ARGV array elements&lt;br /&gt;
     5. ENVIRON array elements&lt;br /&gt;
     6. Array elements created by the split() function&lt;br /&gt;
     7. A command line variable assignment&lt;br /&gt;
     8. Variable assignment from another numeric string variable&lt;br /&gt;
&gt;&gt;&gt;&lt;br /&gt;
&lt;br /&gt;
It can be interpreted as meaning that&lt;br /&gt;
&lt;br /&gt;
awk 'BEGIN{$1 = &quot;10&quot;; print ($1 &gt; 2)}'&lt;br /&gt;
&lt;br /&gt;
should return 1 for instance. But no implementation that I know does so. By assigning a string to $1, it loses that special property whereby when containing a string that looks like a number it shall be considered as a number.&lt;br /&gt;
&lt;br /&gt;
Same applies for ARGV, FILENAME...&lt;br /&gt;
&lt;br /&gt;
Typo in rationale section btw:&lt;br /&gt;
&lt;br /&gt;
&gt; also shall have the numeric value of the numeric string&quot; was removed&lt;br /&gt;
&gt;from several sections of the ISO POSIX-2:1993 standard because *is* &lt;br /&gt;
&gt; specifies an unnecessary implementation detail&lt;br /&gt;
&lt;br /&gt;
is -&gt; it]]></description><category>Shell and Utilities</category><pubDate>Mon, 20 Jul 2026 16:11:56 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1973</guid><comments>http://austingroupbugs.net/view.php?id=1973#bugnotes</comments></item><item><title>0001987: The option value type for TCP_NODELAY is not specified.</title><author></author><link>http://austingroupbugs.net/view.php?id=1987</link><description><![CDATA[The option value type for TCP_NODELAY is not specified. This seem to be the case since at least Issue 6.&lt;br /&gt;
&lt;br /&gt;
Many other options have types of rank `int`, and their Windows counterparts often have DWORD or similar, as such I believe the type for this option value is most likely also `int`, rather than `_Bool` which may have issue with ABI compatibility.]]></description><category>Base Definitions and Headers</category><pubDate>Mon, 20 Jul 2026 15:36:02 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1987</guid><comments>http://austingroupbugs.net/view.php?id=1987#bugnotes</comments></item><item><title>0001991: touch -d 2026-06-29T00:00:60 should not be required to succeed</title><author></author><link>http://austingroupbugs.net/view.php?id=1991</link><description><![CDATA[The POSIX spec for 'touch' (POSIX.1-2024 page 3451 line 117731) specifies an option -d whose argument uses ISO 8601 notation to specify the time. However, if read literally there is a disagreement with ISO 8601 that I believe is unintentional, and which causes GNU coreutils 'touch' to fail to conform.&lt;br /&gt;
&lt;br /&gt;
The apparent disagreement was introduced in POSIX.1-2017, when -d was added with ISO 8601 syntax, but with semantics that seem to defer to the longstanding -t option in the treatment of the seconds (SS) field, namely, if SS is 60 that should mean the first second of the next minute. This meaning for SS contradicts ISO 8601, which says an SS value of 60 can only mean a leap second.&lt;br /&gt;
&lt;br /&gt;
I expect this disagreement with ISO 8601 was unintentional. Furthermore, the disagreement disagrees with GNU 'touch', which reserves SS=60 for true leap seconds which exist on (non-POSIX) platforms that support leap seconds.&lt;br /&gt;
&lt;br /&gt;
GNU 'touch' takes the not unreasonable position that it is helpful to catch typos, such as hours, minutes or seconds that are out of ISO 8601 range. POSIX surely did not intend to require implementations to implement timestamps in a way that disagrees with ISO 8601. Although some implementations, such as FreeBSD 'touch', treat &quot;:60&quot; as meaning the first second of the next minute, this behavior should not be required.]]></description><category>Shell and Utilities</category><pubDate>Mon, 13 Jul 2026 09:13:35 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1991</guid><comments>http://austingroupbugs.net/view.php?id=1991#bugnotes</comments></item><item><title>0001979: conflicting specification for open("existing-directory", O_RDONLY | O_CREAT, 0644)</title><author></author><link>http://austingroupbugs.net/view.php?id=1979</link><description><![CDATA[The description of open() explains O_CREAT with a paragraph that starts:&lt;br /&gt;
&lt;br /&gt;
O_CREAT   If the file exists, this flag has no effect except as noted under O_EXCL below.  &lt;...&gt;&lt;br /&gt;
&lt;br /&gt;
'file' is of course the XBD 'file' which includes directories, devices, etc.  So, open(O_RDONLY|O_CREAT) naming a directory that exists should behave the same as open(O_RDONLY) of that same path.&lt;br /&gt;
&lt;br /&gt;
Then later the ERRORS section contradicts that:&lt;br /&gt;
&lt;br /&gt;
[EISDIR]    The named file is a directory and oflag includes O_WRONLY or O_RDWR, or&lt;br /&gt;
                  includes O_CREAT without O_DIRECTORY, or &lt;...&gt;]]></description><category>System Interfaces</category><pubDate>Mon, 13 Jul 2026 09:02:53 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1979</guid><comments>http://austingroupbugs.net/view.php?id=1979#bugnotes</comments></item><item><title>0001989: Confusing reference to "Symbol" for $0</title><author></author><link>http://austingroupbugs.net/view.php?id=1989</link><description><![CDATA[&gt; The symbol $0 shall refer to the entire record&lt;br /&gt;
&lt;br /&gt;
It's not a &quot;symbol&quot;, it's the $ operator applied to number 0 that yields the &quot;full record variable&quot;, $ 0, $(12/4-3) refer to the same variable.]]></description><category>Shell and Utilities</category><pubDate>Thu, 09 Jul 2026 15:25:35 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1989</guid><comments>http://austingroupbugs.net/view.php?id=1989#bugnotes</comments></item><item><title>0001988: Incorrect reference to "whole input record" for $0</title><author></author><link>http://austingroupbugs.net/view.php?id=1988</link><description><![CDATA[In&lt;br /&gt;
&lt;br /&gt;
&gt; The print statement shall write the value of each expression&lt;br /&gt;
&gt; argument onto the indicated output stream separated by the&lt;br /&gt;
&gt; current output field separator (see variable OFS above), and&lt;br /&gt;
&gt; terminated by the output record separator (see variable ORS&lt;br /&gt;
&gt; above). All expression arguments shall be taken as strings,&lt;br /&gt;
&gt; being converted if necessary; this conversion shall be as&lt;br /&gt;
&gt; described in Expressions in awk, with the exception that the&lt;br /&gt;
&gt; printf format in OFMT shall be used instead of the value in&lt;br /&gt;
&gt; CONVFMT. An empty expression list shall stand for the whole&lt;br /&gt;
&gt; input record ($0).&lt;br /&gt;
&lt;br /&gt;
That late sentence is erroneous and misleading as $0's value is only the input record after that record has been read in and before it has been modified.]]></description><category>Shell and Utilities</category><pubDate>Thu, 09 Jul 2026 15:19:49 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1988</guid><comments>http://austingroupbugs.net/view.php?id=1988#bugnotes</comments></item><item><title>0001985: Add a dark theme to the HTML rendition</title><author></author><link>http://austingroupbugs.net/view.php?id=1985</link><description><![CDATA[Right now, there's only a light theme of the HTML rendition, which has a bright background.&lt;br /&gt;
&lt;br /&gt;
This may cause eye sore for some readers, who switches back and forth between their IDE and the standard text.]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 02 Jul 2026 15:31:44 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1985</guid><comments>http://austingroupbugs.net/view.php?id=1985#bugnotes</comments></item><item><title>0001548: Addition of a POSIX.utf-8 locale (likely as 7.3 "POSIX.utf-8 locale")</title><author></author><link>http://austingroupbugs.net/view.php?id=1548</link><description><![CDATA[Today's modern POSIX systems use Unicode aware locales, almost all realized via the UTF-8 8-bit character set.&lt;br /&gt;
Even though the standard(s) do not offer proper interfaces to deal with this, external libraries (GNU libunicode, ICU) fill this gap in practice.&lt;br /&gt;
(These libraries can also be used with UTF-16 and UTF-32 character sets, the latter i think prefers the 16-bit encoding that is in use in a widely distributed commercial non-POSIX operating system.)&lt;br /&gt;
&lt;br /&gt;
As it stands users are using language/territory specific UTF-8 locales in real-life, like en_US.utf8 or de_DE.utf8.&lt;br /&gt;
Right now there is no UTF-8 aka Unicode-spectrum POSIX locale available.&lt;br /&gt;
&lt;br /&gt;
Some operating systems (OpenBSD) and some libraries (musl LibC) however, and already, &quot;always work with UTF-8 8-bit&quot; Unicode, giving it the name &quot;C.UTF-8&quot; (musl; and as can be seen, the usual naming scheme mess continues).]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 02 Jul 2026 12:38:11 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1548</guid><comments>http://austingroupbugs.net/view.php?id=1548#bugnotes</comments></item><item><title>0001990: This is a configuration test issue. Please ignore if you see this.</title><author></author><link>http://austingroupbugs.net/view.php?id=1990</link><description><![CDATA[Please ignore.]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 25 Jun 2026 19:55:24 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1990</guid><comments>http://austingroupbugs.net/view.php?id=1990#bugnotes</comments></item><item><title>0001986: This is a configuration test issue. Please ignore if you see this.</title><author></author><link>http://austingroupbugs.net/view.php?id=1986</link><description><![CDATA[Test a new email notification configuration on the new hosting setup.]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 25 Jun 2026 18:33:07 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1986</guid><comments>http://austingroupbugs.net/view.php?id=1986#bugnotes</comments></item><item><title>0001983: typo in sendmsg() EXAMPLES</title><author></author><link>http://austingroupbugs.net/view.php?id=1983</link><description><![CDATA[I'm forwarding a report I received by email from someone else.&lt;br /&gt;
&lt;br /&gt;
On 2026-06-02T15:02:40+0800, Zhai Can wrote:&lt;br /&gt;
&gt; &lt;a href=&quot;https://man7.org/linux/man-pages/man3/sendmsg.3p.html&quot; rel=&quot;noopener&quot;&gt;https://man7.org/linux/man-pages/man3/sendmsg.3p.html&lt;/a&gt;&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; In the EXAMPLES section it states a &quot;Done.&quot; which is weird here. I suppose it&lt;br /&gt;
&gt; should be a &quot;None.&quot;? A quick grep shows the whole 3p manuals (2017) only have&lt;br /&gt;
&gt; the one occurrence.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt;   ~/man-pages-posix-2017/man3p ❯ rg Done.&lt;br /&gt;
&gt;   sendmsg.3p&lt;br /&gt;
&gt;   281:Done.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; It's an upstream issue. Also in:&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799/&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Reported-by: Zhai Can &lt;&lt;a href=&quot;mailto:bczhc0@126.com&quot;&gt;bczhc0@126.com&lt;/a&gt;&gt;]]></description><category>System Interfaces</category><pubDate>Thu, 04 Jun 2026 15:16:40 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1983</guid><comments>http://austingroupbugs.net/view.php?id=1983#bugnotes</comments></item><item><title>0001981: Request to define ssize_t as the signed version of size_t</title><author></author><link>http://austingroupbugs.net/view.php?id=1981</link><description><![CDATA[Currently ssize_t is defined as:&lt;br /&gt;
ssize_t shall be signed integer types.&lt;br /&gt;
The type ssize_t shall be capable of storing values at least in the range [-1, {SSIZE_MAX}].&lt;br /&gt;
&lt;br /&gt;
But the sizeof ssize_t is not explicitly defined.&lt;br /&gt;
&lt;br /&gt;
And for glibc,musl,cygwin newlib, they all defined that sizeof(ssize_t)=== sizeof(size_t)&lt;br /&gt;
&lt;br /&gt;
And maybe because the sizeof ssize_t is not defined clearly. clang did not defined the sizeof of ssize_t well:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/llvm/llvm-project/issues/198975&quot; rel=&quot;noopener&quot;&gt;https://github.com/llvm/llvm-project/issues/198975&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The glibc defined the sizeof ssize_t to be equal to size_t by the following codes:&lt;br /&gt;
#if __WORDSIZE == 32&lt;br /&gt;
# define __SWORD_TYPE		int&lt;br /&gt;
#else&lt;br /&gt;
# define __SWORD_TYPE		long int&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
at&lt;br /&gt;
&lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/bits/types.h;h=33b582a8eabf09aadc093658db82353c288590d2;hb=HEAD#l118&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/bits/types.h;h=33b582a8eabf09aadc093658db82353c288590d2;hb=HEAD#l118&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
#define __SSIZE_T_TYPE          __SWORD_TYPE&lt;br /&gt;
at&lt;br /&gt;
&lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/typesizes.h;h=466dd36681a7364952e49b73067d66174543cffd;hb=HEAD#l60&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/typesizes.h;h=466dd36681a7364952e49b73067d66174543cffd;hb=HEAD#l60&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error.  */&lt;br /&gt;
at&lt;br /&gt;
&lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/bits/types.h;h=33b582a8eabf09aadc093658db82353c288590d2;hb=HEAD#l194&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/bits/types.h;h=33b582a8eabf09aadc093658db82353c288590d2;hb=HEAD#l194&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
#ifndef __ssize_t_defined&lt;br /&gt;
typedef __ssize_t ssize_t;&lt;br /&gt;
# define __ssize_t_defined&lt;br /&gt;
#endif&lt;br /&gt;
at&lt;br /&gt;
&lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/sys/types.h;h=2b524761748fc2e0576e3b86fd5558e8a9ebcb18;hb=HEAD#l108&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/sys/types.h;h=2b524761748fc2e0576e3b86fd5558e8a9ebcb18;hb=HEAD#l108&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And the document of __WORDSIZE is:&lt;br /&gt;
/* Size in bits of the 'long int' and pointer types.  */&lt;br /&gt;
#define __WORDSIZE&lt;br /&gt;
at &lt;br /&gt;
&lt;a href=&quot;https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/wordsize.h;h=53013a9275c7c81eccb0356ab956eb2688bcf512;hb=HEAD#l7&quot; rel=&quot;noopener&quot;&gt;https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/wordsize.h;h=53013a9275c7c81eccb0356ab956eb2688bcf512;hb=HEAD#l7&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So basically glibc is already ensure ssize_t is the same size as size_t. Even thoug the command &quot;/* Size in bits of the 'long int' and pointer types.  */&quot; is a bit mis-leading.&lt;br /&gt;
As sizeof pointer will  not always have the same size as size_t.]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 04 Jun 2026 15:12:53 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1981</guid><comments>http://austingroupbugs.net/view.php?id=1981#bugnotes</comments></item><item><title>0001966: Current/previous job definition scattered and ambiguous</title><author></author><link>http://austingroupbugs.net/view.php?id=1966</link><description><![CDATA[POSIX defines the &quot;current job&quot; as:&lt;br /&gt;
&lt;br /&gt;
&gt; In the context of job control, the job that will be used as&lt;br /&gt;
&gt; the default for the fg or bg utilities.&lt;br /&gt;
&lt;br /&gt;
(&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/basedefs/V1_chap03.html#tag_03_93&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/basedefs/V1_chap03.html#tag_03_93&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
With the fg utility specification stating:&lt;br /&gt;
&lt;br /&gt;
&gt; no job_id operand is given, the job_id for the job that was&lt;br /&gt;
&gt; most recently suspended, placed in the background, or run as a&lt;br /&gt;
&gt; background job shall be used.&lt;br /&gt;
&lt;br /&gt;
(&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/fg.html&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/fg.html&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Previous job is defined as:&lt;br /&gt;
&lt;br /&gt;
&gt; In the context of job control, the job that will be used as&lt;br /&gt;
&gt; the default for the fg or bg utilities if the current job&lt;br /&gt;
&gt; exits.&lt;br /&gt;
&lt;br /&gt;
(&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/basedefs/V1_chap03.html#tag_03_286&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/basedefs/V1_chap03.html#tag_03_286&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
We however need to refer to the &quot;jobs&quot; utility specification to&lt;br /&gt;
make some sense out of that:&lt;br /&gt;
&lt;br /&gt;
&gt; The character '+' identifies the job that would be used as a&lt;br /&gt;
&gt; default for the fg or bg utilities; this job can also be&lt;br /&gt;
&gt; specified using the job_id %+ or &quot;%%&quot;. The character '-'&lt;br /&gt;
&gt; identifies the job that would become the default if the&lt;br /&gt;
&gt; current default job were to exit; this job can also be&lt;br /&gt;
&gt; specified using the job_id %-. For other jobs, this field is a&lt;br /&gt;
&gt; &lt;space&gt;. At most one job can be identified with '+' and at&lt;br /&gt;
&gt; most one job can be identified with '-'. If there is any&lt;br /&gt;
&gt; suspended job, then the current job shall be a suspended job.&lt;br /&gt;
&gt; If there are at least two suspended jobs, then the previous&lt;br /&gt;
&gt; job also shall be a suspended job.&lt;br /&gt;
&lt;br /&gt;
(&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/jobs.html&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/jobs.html&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
That suggests &quot;the job_id for the job that was most recently&lt;br /&gt;
suspended, placed in the background, or run as a background job&lt;br /&gt;
shall be used&quot; from the &quot;current job&quot; definition is to be&lt;br /&gt;
interpreted as:&lt;br /&gt;
1. the most recently suspend job if there are suspended jobs&lt;br /&gt;
2. if not, the job most recently &quot;placed in the background&quot;&lt;br /&gt;
(whatever that means) if there are some.&lt;br /&gt;
3. if not the job most recently started in background.&lt;br /&gt;
&lt;br /&gt;
As far I know, the only ways to &quot;place&quot; a job in the background&lt;br /&gt;
are to suspend them whilst they are in foreground or start them&lt;br /&gt;
in background in the first place, so there are several ways to&lt;br /&gt;
interpret that &quot;2&quot; above:&lt;br /&gt;
&lt;br /&gt;
a) 3 is redundant but it's to emphasis that it's the time of&lt;br /&gt;
last suspend (whilst in foreground, or not, to be clarified)&lt;br /&gt;
that's important for those jobs that have been suspended.&lt;br /&gt;
b) it's to say that jobs that have ever been suspended (have&lt;br /&gt;
ever been in foreground before) take precedence over jobs that&lt;br /&gt;
were started in background in the first place and were never&lt;br /&gt;
suspended.&lt;br /&gt;
c) maybe &quot;resumed in background&quot; (by way of bg or any other way&lt;br /&gt;
SIGCONT is delivered) was intended instead of &quot;placed in&lt;br /&gt;
background&quot;.&lt;br /&gt;
&lt;br /&gt;
The Rationale there also has:&lt;br /&gt;
&lt;br /&gt;
&gt; The job control features provided by bg, fg, and jobs are&lt;br /&gt;
&gt; based on the KornShell. The standard developers examined the&lt;br /&gt;
&gt; characteristics of the C shell versions of these utilities and&lt;br /&gt;
&gt; found that differences exist. Despite widespread use of the C&lt;br /&gt;
&gt; shell, the KornShell versions were selected for this volume of&lt;br /&gt;
&gt; POSIX.1-2024 to maintain a degree of uniformity with the rest&lt;br /&gt;
&gt; of the KornShell features selected (such as the very popular&lt;br /&gt;
&gt; command line editing features).&lt;br /&gt;
&lt;br /&gt;
However, testing ksh88 from Solaris 11.4's /usr/xpg4/bin/sh and&lt;br /&gt;
ksh93u+m/1.0.8 2024-01-01, those are clearly not compliant, as&lt;br /&gt;
&lt;br /&gt;
$ sleep 1001&lt;br /&gt;
^Z[1] + Stopped                  sleep 1001&lt;br /&gt;
$ sleep 1002 &amp;&lt;br /&gt;
[2]     20308&lt;br /&gt;
$ jobs&lt;br /&gt;
[2] +  Running                 sleep 1002 &amp;&lt;br /&gt;
[1] - Stopped                  sleep 1001&lt;br /&gt;
&lt;br /&gt;
The suspended job is not made the current job, whilst that's the&lt;br /&gt;
part that is clearly unambiguous in the spec in the description&lt;br /&gt;
of the jobs utility.&lt;br /&gt;
&lt;br /&gt;
In practice, I see a lot of variation between implementations,&lt;br /&gt;
and I don't think I've come across one that fully implements any&lt;br /&gt;
of the interpretations listed above.]]></description><category>Shell and Utilities</category><pubDate>Mon, 01 Jun 2026 10:14:49 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1966</guid><comments>http://austingroupbugs.net/view.php?id=1966#bugnotes</comments></item><item><title>0000298: Need a way to refer to the note being added in an update</title><author></author><link>http://austingroupbugs.net/view.php?id=298</link><description><![CDATA[When adding a note to a bug when marking it as &quot;accepted as marked&quot; and when&lt;br /&gt;
adding an interpretation response, we end up having to update the bug twice.&lt;br /&gt;
First to add a note and fix most of the status fields and then again to fill in the&lt;br /&gt;
&quot;Final Accepted Text&quot; field with the newly added bugnote reference.  This causes&lt;br /&gt;
extra work for those updating bugs and generates unneeded email messages.]]></description><category>Aardvark Mk III</category><pubDate>Thu, 28 May 2026 16:19:11 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=298</guid><comments>http://austingroupbugs.net/view.php?id=298#bugnotes</comments></item><item><title>0000228: Mantis sends quoted &lt;newline&gt; characters instead of real ones in Password Reset mail</title><author></author><link>http://austingroupbugs.net/view.php?id=228</link><description><![CDATA[I have received the following message when trying to reset my password:&lt;br /&gt;
&lt;br /&gt;
----v----&lt;br /&gt;
From: Austin Group Bug Tracker &lt;&lt;a href=&quot;mailto:noreply@msnkbrown.net&quot;&gt;noreply@msnkbrown.net&lt;/a&gt;&gt;&lt;br /&gt;
Subject: [Austin Group Defect Tracker] Password Reset&lt;br /&gt;
Message-ID: &lt;&lt;a href=&quot;mailto:457512dd3d0b96d23290ef1bcbe178e5@austingroupbugs.net&quot;&gt;457512dd3d0b96d23290ef1bcbe178e5@austingroupbugs.net&lt;/a&gt;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;snip&gt;&lt;br /&gt;
&lt;br /&gt;
Someone (presumably you) requested a password change through e-mail&lt;br /&gt;
verification. If this was not you, ignore this message and nothing will&lt;br /&gt;
happen.\n\nIf you requested this verification, visit the following URL to change&lt;br /&gt;
your password: &lt;br /&gt;
&lt;br /&gt;
&lt;snip&gt;&lt;br /&gt;
----^----]]></description><category>Aardvark Mk III</category><pubDate>Thu, 28 May 2026 16:18:54 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=228</guid><comments>http://austingroupbugs.net/view.php?id=228#bugnotes</comments></item><item><title>0000204: Fix Message-ID headers in next version of Mantis (Tracker notifications have incorrect mail headers)</title><author></author><link>http://austingroupbugs.net/view.php?id=204</link><description><![CDATA[The Austin Group Bug Tracker sends messages with 2 Message-ID headers:&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
Subject: [1003.1(2008)/Issue 7 0000129]: exception to syntax guidelines for -I&lt;br /&gt;
Date: Wed, 5 Aug 2009 15:12:18 +0000&lt;br /&gt;
From: Austin Group Bug Tracker &lt;&lt;a href=&quot;mailto:noreply@msnkbrown.net&quot;&gt;noreply@msnkbrown.net&lt;/a&gt;&gt;&lt;br /&gt;
Message-ID: &lt;&lt;a href=&quot;mailto:3e797608891e599f1193f27f81c4c242@austingroupbugs.net&quot;&gt;3e797608891e599f1193f27f81c4c242@austingroupbugs.net&lt;/a&gt;&gt;&lt;br /&gt;
X-Priority: 3&lt;br /&gt;
X-Mailer: PHPMailer [version 1.73]&lt;br /&gt;
keywords: [1003.1(2008)/Issue 7] Shell and Utilities&lt;br /&gt;
Message-ID: &lt;a6c6e0f6af8203f217175fa3dab44bad&gt;&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
Also note that the second Message-Id is incorrect (missing domain&lt;br /&gt;
part).&lt;br /&gt;
&lt;br /&gt;
A second mail was sent, with a note added to the issue. This one&lt;br /&gt;
contains only one (correct) Message-Id, but the In-Reply-To header&lt;br /&gt;
references the wrong Message-Id:&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
Subject: [1003.1(2008)/Issue 7 0000129]: exception to syntax guidelines for -I&lt;br /&gt;
Date: Wed, 5 Aug 2009 20:00:48 +0000&lt;br /&gt;
From: Austin Group Bug Tracker &lt;&lt;a href=&quot;mailto:noreply@msnkbrown.net&quot;&gt;noreply@msnkbrown.net&lt;/a&gt;&gt;&lt;br /&gt;
Message-ID: &lt;&lt;a href=&quot;mailto:80ab3cdfdc0269c6797c80cd065aa4b0@austingroupbugs.net&quot;&gt;80ab3cdfdc0269c6797c80cd065aa4b0@austingroupbugs.net&lt;/a&gt;&gt;&lt;br /&gt;
X-Priority: 3&lt;br /&gt;
X-Mailer: PHPMailer [version 1.73]&lt;br /&gt;
keywords: [1003.1(2008)/Issue 7] Shell and Utilities&lt;br /&gt;
In-Reply-To: &lt;a6c6e0f6af8203f217175fa3dab44bad&gt;&lt;br /&gt;
[...]]]></description><category>Aardvark Mk III</category><pubDate>Thu, 28 May 2026 16:18:33 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=204</guid><comments>http://austingroupbugs.net/view.php?id=204#bugnotes</comments></item><item><title>0000116: Ability to search on Line Number 0</title><author></author><link>http://austingroupbugs.net/view.php?id=116</link><description><![CDATA[I note that I can't set a filter for &quot;Page Number&quot; with value &quot;0&quot; or&lt;br /&gt;
&quot;Line Number&quot; with value &quot;0&quot; to look for bugs that may need to have&lt;br /&gt;
page and line numbers filled in.  Setting Page Number or Line Number&lt;br /&gt;
to 0 and hitting Apply Filter turns the field value into &quot;any&quot;.  Is&lt;br /&gt;
there a way around this?]]></description><category>Aardvark Mk III</category><pubDate>Thu, 28 May 2026 16:16:11 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=116</guid><comments>http://austingroupbugs.net/view.php?id=116#bugnotes</comments></item><item><title>0001982: probably-unintended wording difference with ISO C in mbrtowc(3) and mbrtowcs(3)</title><author></author><link>http://austingroupbugs.net/view.php?id=1982</link><description><![CDATA[I'm forwarding a report I received by email from someone else.&lt;br /&gt;
&lt;br /&gt;
On 2026-05-21T23:08:20+0800, Kang-Che Sung wrote:&lt;br /&gt;
&gt; There's a discrepancy in the wording of the mbrtowc(3) function (and&lt;br /&gt;
&gt; similarly, mbsrtowcs(3) function) between in POSIX and ISO C. It could be&lt;br /&gt;
&gt; reported as an issue to POSIX (the Austin Group), and I am not sure if you&lt;br /&gt;
&gt; can do that.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; In ISO C (I checked in both C99 and C23, in particular the N3220 draft),&lt;br /&gt;
&gt; there's a statement that if mbrtowc() returns a (size_t)(-1) as an encoding&lt;br /&gt;
&gt; error occurs, &quot;the conversion state is unspecified&quot;.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; POSIX (see &lt;&lt;br /&gt;
&gt; &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799/functions/mbrtowc.html&gt;&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799/functions/mbrtowc.html&gt;&lt;/a&gt;),&lt;br /&gt;
&gt; for the same part it says &quot;the conversion state is undefined&quot;.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; This wording difference matters when the &quot;unspecified behavior&quot; and&lt;br /&gt;
&gt; &quot;undefined behavior&quot; are technically different. An example is how the&lt;br /&gt;
&gt; mbstate_t object can be reused after an invalid sequence is encountered.&lt;br /&gt;
&gt; When the state is said to be &quot;undefined&quot; it's implied to be not usable&lt;br /&gt;
&gt; again (unless it is reset, e.g., by an `mbrtowc(NULL, &quot;&quot;, 1, ps)` call).&lt;br /&gt;
&gt; When it's &quot;unspecified&quot; then implementations can allow the state to be&lt;br /&gt;
&gt; reused for certain encodings (possible for UTF-8, for example).&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; This is something I discovered accidentally when researching the multibyte&lt;br /&gt;
&gt; functions in the C standard library and how they work with an encoding like&lt;br /&gt;
&gt; UTF-8.&lt;br /&gt;
&lt;br /&gt;
Reported-by: Kang-Che Sung &lt;&lt;a href=&quot;mailto:explorer09@gmail.com&quot;&gt;explorer09@gmail.com&lt;/a&gt;&gt;]]></description><category>System Interfaces</category><pubDate>Thu, 28 May 2026 16:15:44 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1982</guid><comments>http://austingroupbugs.net/view.php?id=1982#bugnotes</comments></item><item><title>0001980: misleading reference to $(jobs -p) in jobs application usage</title><author></author><link>http://austingroupbugs.net/view.php?id=1980</link><description><![CDATA[In the &quot;APPLICATION USAGE&quot; section, the jobs utility&lt;br /&gt;
specification currently has:&lt;br /&gt;
&lt;br /&gt;
&gt; Usage such as $(jobs -p) provides a way of referring to the&lt;br /&gt;
&gt; process group of the job in an implementation-independent way.&lt;br /&gt;
&lt;br /&gt;
However, $(...) instroduces a subshell environment and the&lt;br /&gt;
&quot;DESCRIPTION&quot; section has:&lt;br /&gt;
&lt;br /&gt;
&gt; If the current shell execution environment (see 2.13 Shell&lt;br /&gt;
&gt; Execution Environment) is not a subshell environment, the jobs&lt;br /&gt;
&gt; utility shall display the status of background jobs that were&lt;br /&gt;
&gt; created in the current shell execution environment; it may&lt;br /&gt;
&gt; also do so if the current shell execution environment is a&lt;br /&gt;
&gt; subshell environment.&lt;br /&gt;
&lt;br /&gt;
Meaning the expansion of $(jobs -p) is unspecified.&lt;br /&gt;
&lt;br /&gt;
What &quot;so&quot; means above in &quot;it may also do so&quot; should be clarified&lt;br /&gt;
as it's unclear whether it may report jobs of the shell outside&lt;br /&gt;
subshell environments, or jobs of the subshell environment or of&lt;br /&gt;
the parent subshell environment or combinations thereof.&lt;br /&gt;
&lt;br /&gt;
In practice, there's a lot of variation between shells and in&lt;br /&gt;
some shells, not all subshells are equal, with the ones created&lt;br /&gt;
by command substitution treated differently from some other ones&lt;br /&gt;
in some for instance.&lt;br /&gt;
&lt;br /&gt;
With bash:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
$ bash -c 'sleep 1 &amp; (sleep 2 &amp; (sleep 3 &amp; jobs))'
[1]+  Running                    sleep 3 &amp;
$ bash -c 'sleep 1 &amp; (sleep 2 &amp; printf &quot;%s\n&quot; &quot;$(sleep 3 &amp; jobs)&quot;)'
[1]-  Running                    sleep 2 &amp;
[2]+  Running                    sleep 3 &amp;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Similarly for subshells incurred by pipelines:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;
$ bash -c 'sleep 1 &amp; (jobs)'
$ bash -c 'sleep 1 &amp; jobs | cat'
[1]+  Running                    sleep 1 &amp;
&lt;/pre&gt;]]></description><category>Shell and Utilities</category><pubDate>Thu, 21 May 2026 16:09:36 +0000</pubDate><guid>http://austingroupbugs.net/view.php?id=1980</guid><comments>http://austingroupbugs.net/view.php?id=1980#bugnotes</comments></item></channel></rss>
