Fixed links to year level compressed tarballs. Added an "Inventory" of year-level compressed tarballs to the generated `years.html` web page. In `bin/gen-years.sh` changed VERSION from "1.0.3 2024-03-26" to "1.1 2024-03-30". In `bin/output-year-index.sh` changed VERSION from "1.1.2 2024-03-26" to "1.2 2024-03-30". Added `inc/topnav.empty.html` for an empty narrow topnav bar. Changed references from "topnav=." to "topnav=empty" in `inc/md2html.cfg`. Removed top level `ioccc.tar.bz2` compressed tarball. NOTE: Sorry (tm Canada 🇨🇦) to remove the top level `ioccc.tar.bz2` file. We will look into [Git Large File Storage [Git-LFS](https://git-lfs.com/). If Git-LFS works well and does not have undesirable side effects, we will consider restoring `ioccc.tar.bz2`. Removed top level Makefile rules for "untar_all_tarball" and "form_all_tarball". Removed `bin/tar-all.sh`. Added `make gen_status` to `make quick_www` and `make www` in the top level `Makefile`. Ran `make www` to perform the above and test under macOS.
2705 lines
225 KiB
HTML
2705 lines
225 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
<!-- START: two lines up starts content from: inc/top.default.html -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- END: this line ends content from: inc/top.default.html -->
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/gen-top-html.sh -->
|
||
<!-- -->
|
||
<!-- The content of main section of this web page came from: bugs.md -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: bugs.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: bugs.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: bugs.md -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||
<!-- -->
|
||
<!-- START: this line starts content from: inc/head.default.html -->
|
||
|
||
<head>
|
||
<link rel="stylesheet" href="./ioccc.css">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
<title>The International Obfuscated C Code Contest</title>
|
||
<meta name="description" content="Bugs and (Mis)features of IOCCC entries">
|
||
<meta name="keywords" content="IOCCC, Bugs and (Mis)features, bugs, features, misfeatures">
|
||
</head>
|
||
|
||
<!-- END: this line ends content from: inc/head.default.html -->
|
||
<!-- START: this line starts content from: inc/body.default.html -->
|
||
|
||
<body>
|
||
|
||
<!-- END: this line ends content from: inc/body.default.html -->
|
||
<!-- START: this line starts content from: inc/header.default.html -->
|
||
|
||
<div class="header">
|
||
<img src="./png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||
<h1>The International Obfuscated C Code Contest</h1>
|
||
<h2>IOCCC entry Bugs and (Mis)features</h2>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/topnav.default.html -->
|
||
|
||
<div class="topnav">
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/topnav.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-row.default.html -->
|
||
|
||
<div class="row">
|
||
|
||
<!-- END: this line ends content from: inc/begin-row.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-leftcolumn.default.html -->
|
||
|
||
<div class="leftcolumn">
|
||
|
||
<!-- END: this line ends content from: inc/begin-leftcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/sidenav.default.html -->
|
||
|
||
<div class="sidenav">
|
||
<a href="#content">Jump to contents</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="./index.html">IOCCC Home</a>
|
||
<a href="./years.html">Winning Entries</a>
|
||
<a href="./authors.html">People who have won</a>
|
||
<a href="./location.html">Location of authors</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="./news.html">IOCCC News</a>
|
||
<a href="./status.html">Contest status</a>
|
||
<a href="./faq.html#submit">How to enter the IOCCC</a>
|
||
<a href="./faq.html">FAQ</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="./bugs.html">Bugs & (mis)features</a>
|
||
<a href="./faq.html#fix_an_entry">Fixing IOCCC entries</a>
|
||
<a href="./faq.html#fix_web_site">Fixing the web site</a>
|
||
<a href="./faq.html#fix_author">Fixing author info</a>
|
||
<a href="./thanks-for-help.html">Thanks for the help</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="./judges.html">The IOCCC Judges</a>
|
||
<a href="./contact.html">Contacting the IOCCC</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="#top">Jump to top</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/sidenav.default.html -->
|
||
<!-- START: this line starts content from: inc/end-leftcolumn.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-leftcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-rightcolumn.default.html -->
|
||
|
||
<div class="rightcolumn">
|
||
|
||
<!-- END: this line ends content from: inc/begin-rightcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||
|
||
<a name="content"></a>
|
||
|
||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
|
||
<h1 id="bugs-and-misfeatures">Bugs and (Mis)features</h1>
|
||
<p>There are a number of known problems with IOCCC entries: many of
|
||
which have to do with differences between today’s compiler environments
|
||
and those of today. In some cases the original code has a bug, some
|
||
of which were recently discovered and many of which were fixed. In some cases
|
||
attempt to port older code to more modern environments introduced bugs.</p>
|
||
<p>The following is a known list of <strong>BUGS and (mis)FEATURES</strong> in IOCCC entries.</p>
|
||
<p>Can you fix/improve entries not under the INABIAF (it’s not a bug it’s a
|
||
feature)? You are <strong>VERY WELCOME</strong> to try.</p>
|
||
<p>As far as how to help: please submit your fixes in a <a href="https://github.com/ioccc-src/temp-test-ioccc/pulls">GitHub pull
|
||
request</a> (with ONE PULL
|
||
REQUEST <em>PER</em> FIX, please)!</p>
|
||
<p>We will be <strong>happy to credit anyone who submits successful <a href="https://github.com/ioccc-src/temp-test-ioccc/pulls">GitHub pull
|
||
requests</a></strong> in the
|
||
<a href="thanks-for-help.html">thanks</a> file. If you’re the author of an entry
|
||
that win the IOCCC, we will add a link to your winning entries in the file
|
||
(if you’re not an author, we can add a link to your GitHub page or personal
|
||
website if you have one, should you wish).</p>
|
||
<p>If you do fix an entry please feel free to delete the entry from this file!
|
||
Otherwise if you wish to not worry about it we can do that to make sure the
|
||
format is consistent and clean.</p>
|
||
<p>THANK YOU!</p>
|
||
<h2 id="to-the-winning-authors">To the winning authors:</h2>
|
||
<p>If you’re the author of an entry that has been fixed and you find it against
|
||
your liking <strong>PLEASE</strong> let us know and we’ll be happy to undo any fixes even if
|
||
it takes away some instructional value or even usability. _In this case we’re
|
||
<strong>VERY SORRY</strong> about it: it’s a fine line, we know, and we tried to use careful
|
||
judgement but invariably some might have been the wrong decision. Thank you for
|
||
understanding!</p>
|
||
<p>I (<a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>)
|
||
accept the blame in some cases; when working on getting entries to compile
|
||
sometimes I got carried away with it and there might be that I fixed some things
|
||
that should not have been fixed. I am correcting these mistakes as I come across
|
||
them but if I miss any please let the judges or me know.</p>
|
||
<h3 id="on-all-fixes-improvements-changes">ON <strong>ALL</strong> FIXES / IMPROVEMENTS / CHANGES</h3>
|
||
<p>Make <strong>ABSOLUTE CERTAIN</strong> that you test the entry <em>BEFORE</em> <strong>AND</strong> <em>AFTER</em> your
|
||
changes! This includes output and the same input functionality! Sometimes it
|
||
might seem to be fine but is actually not! We will note some where this is known
|
||
to happen (if it’s not yet fixed). This has actually already happened to us.
|
||
Sometimes it is okay: some entries are known to not work but they can still have
|
||
improvements (rarer situation but it’s happened). Some might have slightly
|
||
different output but which is not a problem for instance a newline after output
|
||
in <a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>’s changing it to
|
||
<a href="1994/ldb/ldb.c">1994/ldb</a> use <code>fgets()</code> from <code>gets()</code>.</p>
|
||
<p>Make <strong>ABSOLUTE CERTAIN</strong> that you read the index.html file <em>BEFORE</em> your changes
|
||
as it’s important to see that the code is doing what it is supposed to. In the
|
||
case that it’s not obvious (some index.html files do not even have commands to
|
||
try or even explain how to use it!) then you should either skip the entry OR ask
|
||
someone who will know e.g. us.</p>
|
||
<p>Make <strong>ABSOLUTE CERTAIN</strong> that you read the next section, the list of statuses
|
||
and the related information, BEFORE you submit a pull request!</p>
|
||
<p><strong>BE VERY AWARE</strong> that sometimes fixing an entry for one platform will break it
|
||
under another so if you have more than one platform (e.g. macOS and linux) it
|
||
would be wise to test it under all that you have access to. Otherwise we can do
|
||
that. Of course if the entry does not work under any platform and you fix it for
|
||
one that’s more than fine (and it has been done numerous times).</p>
|
||
<p>Again, THANK YOU!</p>
|
||
<h1 id="list-of-statuses---please-read-before-fixing-you-may-skip-if-youre-only-interested-in-knowing-about-entries-with-known-issues">LIST OF STATUSES - PLEASE READ BEFORE FIXING (you may skip if you’re only interested in knowing about entries with known issues)</h1>
|
||
<p>Entries below have one or more of the following <em><strong>STATUS</strong></em> values. Please see
|
||
the text below for more information. If an entry has more than one status it
|
||
means that either they all apply or they compliment each other. For instance
|
||
<a href="2004/gavin/gavin.c">2004/gavin</a> crashes but it also doesn’t even compile with
|
||
some platforms/architectures.</p>
|
||
<h2 id="general-notes-about-the-statuses-and-making-fixes">General notes about the statuses and making fixes</h2>
|
||
<h3 id="compiler-warnings-are-very-rarely-a-problem">Compiler warnings are very rarely a problem</h3>
|
||
<p>In general warnings should NOT be addressed. The only time they should be
|
||
CONSIDERED is when the entry does not work. However note that sometimes trying
|
||
to fix the warnings will actually introduce bugs! Other times ‘fixing’ them will
|
||
break the entry (see below).</p>
|
||
<p>Below in some entries we do list some warnings that definitely should be ignored
|
||
(including some introduced by fixes) but we do not list them all: trying to keep
|
||
track of them all would be impractical especially as different compilers give
|
||
different warnings.</p>
|
||
<p>Another type of warning that would be hard to keep track of is different data
|
||
sizes on different platforms. These tend to be required at the risk that
|
||
sometimes the entry will not work for certain platforms, some of which might or
|
||
might not be fixable; a good example where it was required to change and is okay
|
||
is when <a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed the
|
||
segfault in macOS of <a href="1994/paul/paul.c">1989/paul</a>: changing the <code>int *</code> to a
|
||
<code>long *</code> was required and it works just as well with linux.</p>
|
||
<p>But even if they are fixable (which will likely be hard to do) it’s almost
|
||
certain that such code would be just as non-portable (importable ? :-) ).</p>
|
||
<p>In rare cases they are valid. For instance Cody noticed in linux the following
|
||
warning in <a href="1985/applin/applin.c">1985/applin</a> with gcc:</p>
|
||
<pre><code>applin.c:1:78: warning: incompatible implicit declaration of built-in function 'execlp' [-Wbuiltin-declaration-mismatch]
|
||
1 | main(v,c)char**c;{for(v[c++]=strdup("Hello, world!\n");(!!c)[*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c));**c=!c)write(!!*c,*c,!!**c);}
|
||
| ^~~~~~</code></pre>
|
||
<p>and this reminded him of his fix to
|
||
<a href="1984/anonymous/anonymous.c">1984/anonymous</a>. In the case of <code>1984/anonymous</code> it
|
||
was a bit more involved but with <code>1985/applin</code> one need only add to the Makefile
|
||
<code>-include unistd.h</code>. So there are some cases where fixing warnings can fix a
|
||
problem but in general they should be ignored even if they’re annoying.</p>
|
||
<p>Hopefully with the example entries listed above you get the idea.</p>
|
||
<h3 id="general-request-on-original-code">General request on original code:</h3>
|
||
<p>If you’re fixing an entry please make as <em>FEW CHANGES AS POSSIBLE</em>! This is to
|
||
make it as close to the original but allowing it to work. This might be less of
|
||
a problem when providing alternate versions but it might still be nice to have
|
||
it as close as possible to the original. See also below two points.</p>
|
||
<h3 id="request-for-one-liners">Request for one-liners:</h3>
|
||
<p>For one-liners <em>PLEASE KEEP THE FILE ONE LINE IF AT ALL POSSIBLE</em>! If it needs an
|
||
include you can update the Makefile <code>CINCLUDE</code> variable. For instance if it
|
||
needs <code>stdio.h</code> you could do <code>-include stdio.h</code>. Please leave a space after the
|
||
<code>=</code> in the Makefile. You may also have extra long lines if this seems useful to
|
||
make it a one-liner even if it kind of makes it longer than what the judges
|
||
consider a one-liner. Thank you!</p>
|
||
<h3 id="on-layout-of-program-source">On layout of program source:</h3>
|
||
<p>If you make changes <em>PLEASE TRY AND KEEP THE SOURCE CODE LAYOUT AS CLOSE TO THE
|
||
ORIGINAL AS POSSIBLE</em>. This might not always be possible and if you have an
|
||
editor that does formatting it can cause problems. Sometimes formatters can even
|
||
break code! <a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> has
|
||
experienced this many times with vim so he tends to disable all format options
|
||
when formatting code. In vim you should be able to do that with:</p>
|
||
<pre><code>:set formatoptions=</code></pre>
|
||
<h2 id="status-known-bug---please-help-us-fix">STATUS: known bug - please help us fix</h2>
|
||
<p>Entries with this status have one or more bugs that need to be fixed. Are you
|
||
able to fix it? We welcome your help!</p>
|
||
<p>An important point to note is that there is a very fine line when fixing bugs
|
||
where it might sometimes border on tampering with the program. And after all,
|
||
these are not meant to be maintainable or even good programming style! Use
|
||
careful judgement when fixing bugs please!</p>
|
||
<h2 id="status-possible-bug-possibly-depending-on-system---please-help-test-and-if-necessary-fix">STATUS: possible bug (possibly depending on system) - please help test and if necessary fix</h2>
|
||
<p>Entries with this status might or might not have a bug possibly depending on the
|
||
system. In these entries it’s unknown if there is a bug and sometimes it’s
|
||
because we do not remember and sometimes we don’t have the appropriate system or
|
||
environment to test and fix any possible problems.</p>
|
||
<h2 id="status-might-not-be-completely-functional---can-you-confirm">STATUS: might not be completely functional - can you confirm?</h2>
|
||
<p>Although these entries <em>appear</em> to work for one or more reasons we’re unsure if
|
||
they are completely functional. Can you confirm this? Please let us know so we
|
||
can fix it!</p>
|
||
<h2 id="status-probable-bug-possibly-depending-on-system---please-help-test-and-if-necessary-fix">STATUS: probable bug (possibly depending on system) - please help test and if necessary fix</h2>
|
||
<p>Entries with this status almost certainly have a bug or some other problem. The
|
||
issue or issues might depend on the system much like the above <em>STATUS: possible
|
||
bug (possibly depending on system)</em>.</p>
|
||
<h2 id="status-doesnt-work-with-some-platforms---please-help-us-fix">STATUS: doesn’t work with some platforms - please help us fix</h2>
|
||
<p>Entries with this status do not work under some OSes and/or architectures (and/or
|
||
something else?). Please help us to fix it!</p>
|
||
<h2 id="status-doesnt-work-with-some-compilers---please-provide-alternative-code-or-fix-for-more-compilers">STATUS: doesn’t work with some compilers - please provide alternative code or fix for more compilers</h2>
|
||
<p>Some entries do not work with some compilers. A good example is
|
||
<a href="1992/lush/lush.c">1992/lush</a> which uses error messages from the compiler to
|
||
generate its output.</p>
|
||
<p>If you can provide code that works for multiple compilers without too much
|
||
tampering this is okay though it’s probably not possible with the above
|
||
mentioned entry; otherwise it would be better to provide alternate code. In some
|
||
cases it might be better to provide alternate code anyway. Use a judgement call
|
||
here as best you can manage.</p>
|
||
<h2 id="status-main-function-args-not-allowed---please-help-us-fix">STATUS: main() function args not allowed - please help us fix</h2>
|
||
<p>NOTE: it appears that most if not all of these have been fixed except perhaps
|
||
for <a href="1989/westley/westley.c">1989/westley</a> but this has probably been fixed as
|
||
much as possible given the nature of how it generates code: the entry itself
|
||
compiles but two versions of code it generates does not work with clang.</p>
|
||
<p>However some still might have problems of some kind or another and some might
|
||
not yet be located as an additional defect of clang was noticed where <code>main()</code>
|
||
is not allowed four args or one arg.</p>
|
||
<p>This is what the status means, however.</p>
|
||
<p>Entries with this status have a problem in that the args to main() are not of a
|
||
specific type or there are too many due to this being allowed in earlier C. Some
|
||
compilers like clang have a defect where they do not allow this and some
|
||
versions have an additional defect where they only allow 0, 2 or 3 args, the
|
||
latter of which affected <code>1989/westley</code>, so these entries do not work with
|
||
clang.</p>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> looked at the source
|
||
code of clang and reported that there is no way to override the requirement of
|
||
arg types so these entries will fail to compile with clang. That’s why in some
|
||
entries he fixed he did it by adding a function called <code>pain()</code>. :-) He did not
|
||
check for the number of args as that was discovered later but he suspects it’s
|
||
the same issue.</p>
|
||
<p><strong>NOTE for macOS users</strong>: please be aware that <em>gcc</em> under macOS <strong>is actually
|
||
clang</strong> despite the fact it might appear to be gcc: no symlink and both gcc and
|
||
clang exist but the gcc is clang which you’ll see if you run <code>gcc --version</code>.</p>
|
||
<p>A tip and some fix methods from Cody: in the older days args to main() not given
|
||
a type were implicit ints but when they’re required to be <code>char ** this can cause a problem. In some cases Cody was able to use a</code>char *<code>inside</code>main()`
|
||
(see <a href="1989/tromp/tromp.c">1989/tromp/tromp.c</a> and
|
||
<a href="1986/holloway">1986/holloway/holloway.c</a> for two examples though done slightly
|
||
differently). In other cases he was able to dereference the pointers to be used
|
||
like an int and other times a cast was necessary. He used other various
|
||
techniques to get them to compile. In some cases this introduced a problem but
|
||
typically if not always that problem exists with compilers that are less strict.</p>
|
||
<h2 id="status-main-has-only-one-arg---try-and-make-it-have-2-or-3">STATUS: main() has only one arg - try and make it have 2 or 3</h2>
|
||
<p>Because some versions of clang complain about the number of args of <code>main()</code> and
|
||
in particular say (when it has four, for instance) that it’s only allowed to
|
||
have 0, 2 or 3 args, numerous entries had a second arg added to <code>main()</code> (if
|
||
they only had one). This is in case clang adds further restrictions which is not
|
||
impossible especially as it already claims having only one arg is not allowed.
|
||
At this time (04 Feb 2024) there is one entry known (it is possible that not all
|
||
were checked) that has this problem but it’s not as simple as the others to fix
|
||
without breaking it.</p>
|
||
<h2 id="status-compiled-executable-crashes---please-help-us-fix">STATUS: compiled executable crashes - please help us fix</h2>
|
||
<p>While such entries can compile, the resulting executable sometimes or always
|
||
crashes.</p>
|
||
<p>NOTE: this does NOT apply to entries under the INABIAF status (though they’re
|
||
not mutually exclusive in some cases).</p>
|
||
<p>REMINDER: if you’re debugging a crash it will be very helpful to have <code>-O0 -g</code>
|
||
or if you can <code>-ggdb3</code> when compiling as that will help with debugging symbols.</p>
|
||
<h2 id="status-uses-gets---change-to-fgets-if-possible">STATUS: uses gets() - change to fgets() if possible</h2>
|
||
<p>Entries with this status use <code>gets()</code> which is unsafe because it has no limit on
|
||
the length of the string. <a href="authors.html#Cody_Boone_Ferguson">Cody Boone
|
||
Ferguson</a> has fixed several of these and he’s
|
||
working on others in between fixing other things.</p>
|
||
<p>There’s a very good reason for this even though it is bordering on tampering
|
||
entries: in modern systems one will get possibly alarming and certainly annoying
|
||
warnings during at least one of compiling, linking and execution. In macOS it’s
|
||
most annoying as it happens during execution (also compilation) with the warning
|
||
being interspersed with the output of the program, often causing confusing
|
||
output with the entry. A good example that was fixed is
|
||
<a href="1990/tbr/tbr.c">1990/tbr</a>.</p>
|
||
<p>Cody provided some important notes on this status with respect to fixing /
|
||
changing entries:</p>
|
||
<ol start="0" type="1">
|
||
<li><p>In some cases changing the entry to use <code>fgets()</code> will break the entry and in
|
||
some cases cause it to crash. Where this is known we will document it. Some of
|
||
these Cody is also off and on working on.</p></li>
|
||
<li><p>You <strong>MUST</strong> check the output before and after to make sure that it remains
|
||
the same. Sometimes the output might not be immediately obviously wrong but is.
|
||
We will document known examples as we come across them.</p></li>
|
||
<li><p><code>gets()</code> does NOT STORE the <code>'\n'</code> but <code>fgets()</code> DOES! This is one of the
|
||
reasons some of the entries break when changed to <code>fgets()</code>. Cody has fixed some
|
||
of these but there are others he hasn’t had time to address or even discover
|
||
yet.</p></li>
|
||
<li><p>Just because you don’t see the string <code>gets</code> in the code does not mean it’s
|
||
not used. It is after all the International <em>Obfuscated C Code</em> Contest! :-)
|
||
Sometimes it will be in the Makefile and other times it will be obfuscated in
|
||
other ways. Compilers and linkers tend to warn about its use (and as noted in
|
||
macOS it also happens at execution) and this is a good way to find entries that
|
||
use it even if it’s not visible in the code.</p></li>
|
||
</ol>
|
||
<p><em>NOTE</em>: this status is <em>NOT necessarily mutually exclusive</em> with the <em>INABIAF</em>
|
||
(it’s not a bug it’s a feature) status. The reason for this is due to warnings
|
||
during compiling, linking and/or runtime, sometimes causing confusing output (as
|
||
noted above).</p>
|
||
<p>Sometimes <code>getline(3)</code> will work but note that this function also stores the
|
||
newline just like <code>fgets(3)</code>.</p>
|
||
<h2 id="status-missing-files---please-provide-them">STATUS: missing file(s) - please provide them</h2>
|
||
<p>In these entries one file or multiple files are missing from the repo. In some
|
||
cases these files can be found on the <a href="https://www.ioccc.org">IOCCC website</a> but
|
||
in other cases they are entirely absent. In this case you’ll probably have to
|
||
contact the author (unless you are the author! :-) ).</p>
|
||
<h2 id="status-missing-make-rules---please-provide-them">STATUS: missing make rules - please provide them</h2>
|
||
<p>In these entries one or more make rules noted by the author and/or judges is/are
|
||
missing. You might consider looking at the <a href="archive">archive</a> as a good place
|
||
to find them.</p>
|
||
<h2 id="status-missing-or-dead-link---please-provide-them">STATUS: missing or dead link - please provide them</h2>
|
||
<p>This is as they sound: a link is either missing or it’s no longer valid. In many
|
||
cases the <a href="https://web.archive.org">Internet Wayback Machine</a> will be very
|
||
useful but there happens to be numerous links that this is not helpful. In other
|
||
cases the URL has changed. Some of these have been discovered by the Internet
|
||
Wayback Machine with the orange status.</p>
|
||
<h3 id="statuses-of-internet-wayback-machine-archive">Statuses of Internet Wayback Machine archive:</h3>
|
||
<ul>
|
||
<li>Green (3xx): redirect (this has been used to find changes in URL).</li>
|
||
<li>Orange (4xx): not found etc.</li>
|
||
<li>Blue: this is a good link (but note that this doesn’t mean that it’s correct!).</li>
|
||
</ul>
|
||
<p>The archive website will tell you if the link was never captured.</p>
|
||
<h2 id="status-inabiaf---please-do-not-fix">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h2>
|
||
<h3 id="inabiaf-its-not-a-bug-its-a-feature--">INABIAF: It’s not a bug it’s a feature :-)</h3>
|
||
<p>Entries with this status should NOT be touched (unless they have another status
|
||
that suggests that <em>that</em> issue can be changed): they are system specific by
|
||
design or are other things that are not actually bugs or bugs even if they
|
||
appear to be. Or they might be documented bugs or things that simply are part of
|
||
the entry. Nonetheless they are noteworthy.</p>
|
||
<p>NOTE: the definition of this status changed over time. At one point it was when
|
||
something was noted by the author, the judges, a consequence of earlier
|
||
requirements for winning entries or the purpose was to do something that might
|
||
appear to be buggy. An example of system specific entries:</p>
|
||
<p><a href="1984/mullender/mullender.c">1984/mullender</a> (see below and the <a href="faq.html">FAQ</a>
|
||
for a version that works in modern systems) is very system specific and was
|
||
before system specific winning entries were discouraged. This is an all time
|
||
personal favourite of Landon Curt Noll. Run the alternate code to understand why
|
||
this might be (along with how strange the source code is :-) ).</p>
|
||
<p>An example where a crash is not a bug: <a href="2019/endoh/endoh.c">2019/endoh</a> is
|
||
supposed to crash. There are others that are also supposed to crash or that are
|
||
known to segfault but are considered features.</p>
|
||
<p>An important note is that if the index.html of the entry has a bug status that
|
||
says it can be fixed it can be. Otherwise it should not be.</p>
|
||
<p>Nonetheless we challenge you to fix these entries for educational/instructional
|
||
value and/or enjoyment but we kindly request that you <strong>DO NOT</strong> submit a pull
|
||
request unless it’s a bug or (mis)feature we would like you to fix! If you can’t
|
||
figure it out you’re invited to look at the git diffs, where there are some
|
||
(some were fixed earlier on but rolled back as both Cody and Landon individually
|
||
felt that the fix was tampering with the entry).</p>
|
||
<p>NOTE: in the case of <code>gets()</code> we’ve fixed some to avoid the warning of the
|
||
compiler, linker or even during runtime, depending on the system. In <a href="1990/tbr/tbr.c">some cases
|
||
like 1990/tbr</a> the fix actually prevents confusing output (though that
|
||
was not the only fix made in that entry).</p>
|
||
<h3 id="exception-your-own-entries">Exception: your own entries</h3>
|
||
<p>Of course if you’re the author you’re welcome to fix your own entry, prefer your
|
||
own fix or suggest that they’re fixed!</p>
|
||
<h1 id="list-of-entries-by-year-sorted-in-alphabetical-order-per-year">List of entries by year, sorted in alphabetical order per year</h1>
|
||
<h1 id="section"><a name="1984"></a>1984</h1>
|
||
<h2 id="decot"><a name="1984_decot"></a>1984/decot</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-1">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1984decotdedot.c">Source code: <a href="1984/decot/decot.c">1984/decot/dedot.c</a></h3>
|
||
<h3 id="information-1984decotindex.html">Information: <a href="1984/decot/index.html">1984/decot/index.html</a></h3>
|
||
<p>The purpose of this program is to print out a string of rubbish. In particular
|
||
you should see something like:</p>
|
||
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./decot</span>
|
||
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="st">'",x); /*</span></span>
|
||
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="st">\</span></span></code></pre></div>
|
||
<p>without a newline after the <code>\</code>. This is not a bug.</p>
|
||
<h2 id="mullender"><a name="1984_mullender"></a>1984/mullender</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-2">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1984mullendermullender.c">Source code: <a href="1984/mullender/mullender.c">1984/mullender/mullender.c</a></h3>
|
||
<h3 id="information-1984mullenderindex.html">Information: <a href="1984/mullender/index.html">1984/mullender/index.html</a></h3>
|
||
<p>Although there is an alt version and supplementary program added by Cody that
|
||
will work in modern systems, if you do not have a
|
||
<a href="https://en.wikipedia.org/wiki/VAX-11">VAX-11</a> or
|
||
<a href="https://en.wikipedia.org/wiki/PDP-11">PDP-11</a> to run the original entry on it
|
||
will not work. See the index.html for details on the alternate versions.</p>
|
||
<p>Cody added and fixed the <a href="1984/mullender/gentab.c">gentab.c</a> which is from the
|
||
author’s (or one of them, Mullender) remarks found by Cody. Cody fixed this to
|
||
compile and work (as best as he can determine: he has no VAX-11 or PDP-11 or
|
||
emulator to test it) but running the code on the binary itself produces a
|
||
<code>short[]</code> that can compile in modern systems though it’ll not work.</p>
|
||
<h1 id="section-1"><a name="1985"></a>1985</h1>
|
||
<p>There are no known bugs and (Mis)features for entries in 1985.</p>
|
||
<h1 id="section-2"><a name="1986"></a>1986</h1>
|
||
<h2 id="august"><a name="1986_august"></a>1986/august</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-3">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1986augustaugust.c">Source code: <a href="1986/august/august.c">1986/august/august.c</a></h3>
|
||
<h3 id="information-1986augustindex.html">Information: <a href="1986/august/index.html">1986/august/index.html</a></h3>
|
||
<p>This entry is known to segfault after printing its output. It was documented by
|
||
the judges and shouldn’t be fixed.</p>
|
||
<h1 id="section-3"><a name="1987"></a>1987</h1>
|
||
<p>There are no known bugs and (Mis)features for entries in 1987.</p>
|
||
<h1 id="section-4"><a name="1988"></a>1988</h1>
|
||
<h2 id="dale"><a name="1988_dale"></a>1988/dale</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-4">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1988daledale.c">Source code: <a href="1988/dale/dale.c">1988/dale/dale.c</a></h3>
|
||
<h3 id="information-1988daleindex.html">Information: <a href="1988/dale/index.html">1988/dale/index.html</a></h3>
|
||
<p>In linux it might happen that despite no error message or message about doing
|
||
so, the program drops a core file into the directory even though the entry works
|
||
and does not crash.</p>
|
||
<h1 id="section-5"><a name="1989"></a>1989</h1>
|
||
<h2 id="fubar"><a name="1989_fubar"></a>1989/fubar</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-1">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1989fubarfubar.c">Source code: <a href="1989/fubar/fubar.c">1989/fubar/fubar.c</a></h3>
|
||
<h3 id="information-1989fubarindex.html">Information: <a href="1989/fubar/index.html">1989/fubar/index.html</a></h3>
|
||
<p>If you use either <code>fubar</code> or <code>ouroboros.c</code> (it’s executable, see index.html for
|
||
details) with a number < 0 or larger than, say 20, it’s very likely that the
|
||
program will turn into an infinite loop trying to compile code with syntax
|
||
errors.</p>
|
||
<p>If you want to try and fix this (mis)feature, you are welcome to try.</p>
|
||
<h2 id="robison"><a name="1989_robison"></a>1989/robison</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-5">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1989robisonrobison.c">Source code: <a href="1989/robison/robison.c">1989/robison/robison.c</a></h3>
|
||
<h3 id="information-1989robisonindex.html">Information: <a href="1989/robison/index.html">1989/robison/index.html</a></h3>
|
||
<p>This program will very likely crash or break into tiny bits :-) if you feed it
|
||
numbers with non-binary digits.</p>
|
||
<p>There are also other cases where this can happen for instance using unsupported
|
||
operators like <code>/</code>. To see what operators are supported check the source code.</p>
|
||
<h2 id="westley"><a name="1989_westley"></a>1989/westley</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-2">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1989westleywestley.c">Source code: <a href="1989/westley/westley.c">1989/westley/westley.c</a></h3>
|
||
<h3 id="information-1989westleyindex.html">Information: <a href="1989/westley/index.html">1989/westley/index.html</a></h3>
|
||
<p>With version 2 it sometimes segfaults even with the same input where other times
|
||
it does not. We don’t believe this is because of the fix that lets some versions
|
||
be compiled with clang. An example invocation is:</p>
|
||
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./ver2</span> <span class="op"><</span> westley.c</span></code></pre></div>
|
||
<h3 id="a-useful-note-on-changingfixing-this-program">A useful note on changing/fixing this program</h3>
|
||
<p>It should be noted that in additional to rot13 names there is code that is the
|
||
reverse of other code (also wrt names). See the source file and the index.html
|
||
(in the author’s remarks) for more details.</p>
|
||
<p>Fixing the (Mis)feature is likely to be a very difficult challenge especially
|
||
without breaking something else which is far more likely (see below in tips from
|
||
Cody). You are welcome to try and fix it if you can!</p>
|
||
<h3 id="tips-from-cody">Tips from Cody:</h3>
|
||
<p>The reason this is crashing is that the array <code>irk</code> is being accessed way out of
|
||
bounds by the int <code>gnat</code>. For instance:</p>
|
||
<pre><code>Program terminated with signal SIGSEGV, Segmentation fault.
|
||
#0 0x0000000000401335 in main (ABBA@entry=<optimized out>, tang@entry=<optimized out>, gnat@entry=<optimized out>, Near@entry=<optimized out>)
|
||
at ver2.c:23
|
||
23 &&gnat!({)Near,noon,/*krelc*/)<0&&(Near= - irk[-gnat--]-2)))&&main(ABBA,
|
||
(gdb) p gnat
|
||
$1 = -518733305</code></pre>
|
||
<h3 id="magic-of-the-entry">Magic of the entry:</h3>
|
||
<p>The real trouble is that the code is generated and in a complex way or rather
|
||
ways.</p>
|
||
<p>I will explain this a little bit (though it might be more than a bit according
|
||
to many :-) ) but that is all I can do for now. The program, when used without
|
||
any args, will print out what it reads. If one arg is specified it will do a
|
||
ROT13 of it. If two args are specified it will print out the text backwards
|
||
(<em>WITHOUT ROT13!</em>). If three args are specified it will do both <strong><em>reversal AND
|
||
ROT13</em></strong>.</p>
|
||
<p>So <code>ver0</code> is the same as the main program; <code>ver1</code> is the ROT13 of the code (but
|
||
see below); <code>ver2</code> will reverse the code and <code>ver3</code> will both reverse and ROT13
|
||
the code. But it’s trickier than that as one might expect.</p>
|
||
<p>The comments are processed too. Furthermore it happens that the last line
|
||
becomes the first and the first line becomes the last! Now if you look at the
|
||
code you’ll see on the first line:</p>
|
||
<div class="sourceCode" id="cb6"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="co">/**//*/};)/**/</span>pain<span class="op">(*</span><span class="co">//**/tang ,gnat/**//*/,ABBA~,0-0(avnz;)0-0,tang,raeN</span></span></code></pre></div>
|
||
<p>In <code>ver0</code> it’ll be the same but the others are more interesting.</p>
|
||
<p>In <code>ver1</code> you’ll see on the last line:</p>
|
||
<div class="sourceCode" id="cb7"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>cnva<span class="op">((</span>vag<span class="op">)</span>NOON<span class="op">&</span><span class="dv">2</span><span class="co">/*//*\\**/</span><span class="op">,</span>gnat<span class="op">,</span>tang <span class="op">,</span>NOON<span class="co">/**//*/(niam/**/</span><span class="op">);}</span><span class="co">/*//**/</span></span></code></pre></div>
|
||
<p>and on the first line:</p>
|
||
<div class="sourceCode" id="cb8"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="co">/**//*/};)/**/</span>cnva<span class="op">(*</span><span class="co">//**/gnat ,tang/**//*/,NOON~,0-0(niam;)0-0,gnat,enrA</span></span></code></pre></div>
|
||
<p>Observe that the ROT13 of <code>pain</code> is <code>cnva</code> and the ROT13 of <code>main</code> is <code>znva</code>.
|
||
The ROT13 of <code>NOON</code> is <code>ABBA</code>. <code>vag</code> is ROT13 of <code>int</code>, <code>gnat</code> and <code>tang</code> are
|
||
ROT13 of each other as well which is the reverse of the original (this is not
|
||
because it goes backwards (it doesn’t in this version) but because they are
|
||
ROT13 pairs!). <code>main</code> spelt backwards is <code>niam</code> and <code>pain</code> spelt backwards is
|
||
<code>niap</code>. Furthermore see the Makefile for other defines that had to be specified
|
||
and for ver2 and ver3 (that both work with gcc) one had to be undefined (search
|
||
for <code>CDEFINE</code> and <code>-U</code>). These details will be important momentarily.</p>
|
||
<p>As far as <code>NOON</code> and <code>ABBA</code> being ROT13 pairs, notice how <code>NOON</code> is not in the
|
||
original code but <code>ABBA</code> is; but in other versions it becomes <code>NOON</code> and they
|
||
also have <code>abba</code> which the original code does not!</p>
|
||
<p>Now notice how the <code>avnz</code> in the first line got changed to <code>niam</code>, its ROT13
|
||
value. Notice also how some of these are in comments!</p>
|
||
<p><code>main()</code> is in there somewhere and that had to be changed to call
|
||
<code>pain()</code> (see the <a href="thanks-for-help.html#1989_westley">thanks</a>
|
||
file (see the <em>1989/westley</em> section for details on how as this was
|
||
not as straight forward as it is for other entries) as well. Now
|
||
if you notice on that line you have in a comment <code>niam</code>. If you
|
||
were to change that to <code>niap</code> (pain backwards) that function would
|
||
end up as <code>pain()</code> in generated code! That’s assuming that it’s
|
||
just the reversal version, of course but ver1 is the ROT13 version.</p>
|
||
<p>These facts are bad enough but then you throw in the reverse of it without ROT13
|
||
and then another version that has the reversal <em>and</em> ROT13 then you can see it’s
|
||
nigh impossible to fix if not impossible.</p>
|
||
<p>The fix to get it to even compile with clang and then get the first two
|
||
(counting the original, <code>ver0</code>) to work was the hardest fix I made due to how
|
||
the comments in reverse and ROT13 of it all works together, especially allowing
|
||
all versions to compile with gcc. The only reason that it doesn’t work
|
||
completely with clang is the arg types of main() (see if you can figure out how
|
||
the change of <code>main()</code> in <code>westley.c</code> is not carried over to versions 2 and 3!);
|
||
originally none of them compiled with clang.</p>
|
||
<p>But it was possible to get the ROT13 code to compile with clang but the other
|
||
versions, reversed as well as ROT13 and reversed code, proved much more
|
||
problematic. I got it to compile (or maybe mostly compile) all versions with
|
||
clang but I then carried it over to gcc in another system and it had syntax
|
||
errors.</p>
|
||
<p>That’s about all I can say for how it works as other things have to be done too.
|
||
Enjoy! :-)</p>
|
||
<h1 id="section-6"><a name="1990"></a>1990</h1>
|
||
<h2 id="baruch"><a name="1990_baruch"></a>1990/baruch</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-3">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1990baruchbaruch.c">Source code: <a href="1990/baruch/baruch.c">1990/baruch/baruch.c</a></h3>
|
||
<h3 id="information-1990baruchindex.html">Information: <a href="1990/baruch/index.html">1990/baruch/index.html</a></h3>
|
||
<p>A point worth considering is that as the number passed into the program gets
|
||
bigger the number of lines of output gets substantially larger and it takes much
|
||
more time and resources to run as well. For instance:</p>
|
||
<div class="sourceCode" id="cb9"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> for n in <span class="va">$(</span><span class="fu">seq</span> 1 18<span class="va">)</span><span class="kw">;</span> <span class="cf">do</span> <span class="bu">echo</span> <span class="st">"</span><span class="va">$n</span><span class="st">"</span><span class="kw">;</span> <span class="bu">echo</span> <span class="st">"</span><span class="va">$n</span><span class="st">"</span> <span class="kw">|</span> <span class="bu">time</span> <span class="st">"./baruch"</span> <span class="kw">|</span> <span class="fu">wc</span> <span class="at">-l</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="at">-E</span> <span class="at">-e</span> <span class="st">'s/[[:space:]]//g'</span><span class="kw">;</span> <span class="cf">done</span></span>
|
||
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a><span class="ex">1</span></span>
|
||
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a><span class="ex">3</span></span>
|
||
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 5% cpu 0.115 total</span>
|
||
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a><span class="ex">2</span></span>
|
||
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a><span class="ex">1</span></span>
|
||
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 64% cpu 0.004 total</span>
|
||
<span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a><span class="ex">3</span></span>
|
||
<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a><span class="ex">1</span></span>
|
||
<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 60% cpu 0.003 total</span>
|
||
<span id="cb9-11"><a href="#cb9-11" aria-hidden="true" tabindex="-1"></a><span class="ex">4</span></span>
|
||
<span id="cb9-12"><a href="#cb9-12" aria-hidden="true" tabindex="-1"></a><span class="ex">11</span></span>
|
||
<span id="cb9-13"><a href="#cb9-13" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 64% cpu 0.003 total</span>
|
||
<span id="cb9-14"><a href="#cb9-14" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span>
|
||
<span id="cb9-15"><a href="#cb9-15" aria-hidden="true" tabindex="-1"></a><span class="ex">61</span></span>
|
||
<span id="cb9-16"><a href="#cb9-16" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 66% cpu 0.003 total</span>
|
||
<span id="cb9-17"><a href="#cb9-17" aria-hidden="true" tabindex="-1"></a><span class="ex">6</span></span>
|
||
<span id="cb9-18"><a href="#cb9-18" aria-hidden="true" tabindex="-1"></a><span class="ex">29</span></span>
|
||
<span id="cb9-19"><a href="#cb9-19" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 61% cpu 0.003 total</span>
|
||
<span id="cb9-20"><a href="#cb9-20" aria-hidden="true" tabindex="-1"></a><span class="ex">7</span></span>
|
||
<span id="cb9-21"><a href="#cb9-21" aria-hidden="true" tabindex="-1"></a><span class="ex">321</span></span>
|
||
<span id="cb9-22"><a href="#cb9-22" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 69% cpu 0.002 total</span>
|
||
<span id="cb9-23"><a href="#cb9-23" aria-hidden="true" tabindex="-1"></a><span class="ex">8</span></span>
|
||
<span id="cb9-24"><a href="#cb9-24" aria-hidden="true" tabindex="-1"></a><span class="ex">829</span></span>
|
||
<span id="cb9-25"><a href="#cb9-25" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 76% cpu 0.003 total</span>
|
||
<span id="cb9-26"><a href="#cb9-26" aria-hidden="true" tabindex="-1"></a><span class="ex">9</span></span>
|
||
<span id="cb9-27"><a href="#cb9-27" aria-hidden="true" tabindex="-1"></a><span class="ex">3521</span></span>
|
||
<span id="cb9-28"><a href="#cb9-28" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.00s user 0.00s system 87% cpu 0.005 total</span>
|
||
<span id="cb9-29"><a href="#cb9-29" aria-hidden="true" tabindex="-1"></a><span class="ex">10</span></span>
|
||
<span id="cb9-30"><a href="#cb9-30" aria-hidden="true" tabindex="-1"></a><span class="ex">7965</span></span>
|
||
<span id="cb9-31"><a href="#cb9-31" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.01s user 0.00s system 95% cpu 0.014 total</span>
|
||
<span id="cb9-32"><a href="#cb9-32" aria-hidden="true" tabindex="-1"></a><span class="ex">11</span></span>
|
||
<span id="cb9-33"><a href="#cb9-33" aria-hidden="true" tabindex="-1"></a><span class="ex">32161</span></span>
|
||
<span id="cb9-34"><a href="#cb9-34" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.05s user 0.00s system 98% cpu 0.053 total</span>
|
||
<span id="cb9-35"><a href="#cb9-35" aria-hidden="true" tabindex="-1"></a><span class="ex">12</span></span>
|
||
<span id="cb9-36"><a href="#cb9-36" aria-hidden="true" tabindex="-1"></a><span class="ex">184601</span></span>
|
||
<span id="cb9-37"><a href="#cb9-37" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 0.29s user 0.00s system 99% cpu 0.294 total</span>
|
||
<span id="cb9-38"><a href="#cb9-38" aria-hidden="true" tabindex="-1"></a><span class="ex">13</span></span>
|
||
<span id="cb9-39"><a href="#cb9-39" aria-hidden="true" tabindex="-1"></a><span class="ex">1031969</span></span>
|
||
<span id="cb9-40"><a href="#cb9-40" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 1.78s user 0.00s system 99% cpu 1.794 total</span>
|
||
<span id="cb9-41"><a href="#cb9-41" aria-hidden="true" tabindex="-1"></a><span class="ex">14</span></span>
|
||
<span id="cb9-42"><a href="#cb9-42" aria-hidden="true" tabindex="-1"></a><span class="ex">5483941</span></span>
|
||
<span id="cb9-43"><a href="#cb9-43" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 11.26s user 0.02s system 99% cpu 11.311 total</span>
|
||
<span id="cb9-44"><a href="#cb9-44" aria-hidden="true" tabindex="-1"></a><span class="ex">15</span></span>
|
||
<span id="cb9-45"><a href="#cb9-45" aria-hidden="true" tabindex="-1"></a><span class="ex">36466945</span></span>
|
||
<span id="cb9-46"><a href="#cb9-46" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 79.20s user 0.15s system 99% cpu 1:19.72 total</span>
|
||
<span id="cb9-47"><a href="#cb9-47" aria-hidden="true" tabindex="-1"></a><span class="ex">16</span></span>
|
||
<span id="cb9-48"><a href="#cb9-48" aria-hidden="true" tabindex="-1"></a><span class="ex">251132705</span></span>
|
||
<span id="cb9-49"><a href="#cb9-49" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 592.89s user 0.77s system 99% cpu 9:55.34 total</span>
|
||
<span id="cb9-50"><a href="#cb9-50" aria-hidden="true" tabindex="-1"></a><span class="ex">17</span></span>
|
||
<span id="cb9-51"><a href="#cb9-51" aria-hidden="true" tabindex="-1"></a><span class="ex">1724671873</span></span>
|
||
<span id="cb9-52"><a href="#cb9-52" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 4535.71s user 5.25s system 99% cpu 1:15:49.76 total</span>
|
||
<span id="cb9-53"><a href="#cb9-53" aria-hidden="true" tabindex="-1"></a><span class="ex">18</span></span>
|
||
<span id="cb9-54"><a href="#cb9-54" aria-hidden="true" tabindex="-1"></a><span class="ex">12655721857</span></span>
|
||
<span id="cb9-55"><a href="#cb9-55" aria-hidden="true" tabindex="-1"></a><span class="ex">./baruch</span> 37496.97s user 58.50s system 99% cpu 10:27:48.29 total</span></code></pre></div>
|
||
<h2 id="jaw"><a name="1990_jaw"></a>1990/jaw</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-4">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1990jawjaw.c">Source code: <a href="1990/jaw/jaw.c">1990/jaw/jaw.c</a></h3>
|
||
<h3 id="information-1990jawindex.html">Information: <a href="1990/jaw/index.html">1990/jaw/index.html</a></h3>
|
||
<p><a href="../authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>
|
||
fixed some issues in this program and <a href="../authors.html#Yusuke_Endoh">Yusuke
|
||
Endoh</a> provided the <code>btoa</code>
|
||
script but it appears there is a bug in this entry. The judges wrote that to
|
||
test the entry one can do:</p>
|
||
<div class="sourceCode" id="cb10"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="st">"Quartz glyph jocks vend, fix, BMW."</span> <span class="kw">|</span> <span class="ex">compress</span> <span class="kw">|</span> <span class="ex">./btoa</span> <span class="kw">|</span> <span class="ex">./jaw</span></span></code></pre></div>
|
||
<p>which should apply the identity transformation to a minimal holoalphabetic
|
||
sentence.</p>
|
||
<p>But doing this shows instead:</p>
|
||
<div class="sourceCode" id="cb11"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="st">"Quartz glyph jocks vend, fix, BMW."</span> <span class="kw">|</span> <span class="ex">compress</span> <span class="kw">|</span> <span class="ex">./btoa</span> <span class="kw">|</span> <span class="ex">./jaw</span></span>
|
||
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="ex">a얖?</span><span class="er">)</span><span class="ex">V...?????777??hC??h??-?</span> <span class="er">)</span><span class="ex">SSSSXXX????r?L=???*?-???ppp,,,?R</span></span>
|
||
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="ex">?j</span></span>
|
||
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a><span class="ex">111-</span><span class="er">)))</span><span class="ex">?</span> <span class="st">'..F@E</span></span>
|
||
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a><span class="st"> ???b111?</span></span>
|
||
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a><span class="st">..F..F.?n,,,,,L@E$</span></span></code></pre></div>
|
||
<p>Notice how there’s no newline at the end: that final <code>$</code> is the prompt.</p>
|
||
<p>If one does, however:</p>
|
||
<div class="sourceCode" id="cb12"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="st">"Quartz glyph jocks vend, fix, BMW."</span> <span class="kw">|</span> <span class="ex">compress</span> <span class="kw">|</span> <span class="ex">./btoa</span> <span class="kw">|</span> <span class="ex">./jaw</span> <span class="kw">|</span> <span class="ex">./jaw</span></span></code></pre></div>
|
||
<p>they will get just</p>
|
||
<pre><code>oops</code></pre>
|
||
<p>which seems to be an error message (one of the fixes was to make it not use
|
||
<code>perror(3)</code> - this fixed something else though it’s no longer known what).</p>
|
||
<p>The script <a href="1990/jaw/shark.sh">shark.sh</a> has some issues too in that due to
|
||
path not having <code>.</code> (this and maybe some other things were fixed) and <code>tar</code> not
|
||
wanting to accept reading from <code>stdin</code> (this in particular) even with the right
|
||
options used, seemingly, it has to write to disk the tarball which seems to
|
||
defeat the purpose. This would ideally be fixed.</p>
|
||
<h2 id="tbr"><a name="1990_tbr"></a>1990/tbr</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-6">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1990tbrtbr.c">Source code: <a href="1990/tbr/tbr.c">1990/tbr/tbr.c</a></h3>
|
||
<h3 id="information-1990tbrindex.html">Information: <a href="1990/tbr/index.html">1990/tbr/index.html</a></h3>
|
||
<p>The authors provided a list of features in the
|
||
<a href="1990/tbr/index.html#bugs">BUGS</a> section in their remarks.</p>
|
||
<h2 id="theorem"><a name="1990_theorem"></a>1990/theorem</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-7">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1990theoremtheorem.c">Source code: <a href="1990/theorem/theorem.c">1990/theorem/theorem.c</a></h3>
|
||
<h3 id="information-1990theoremindex.html">Information: <a href="1990/theorem/index.html">1990/theorem/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed many bugs that
|
||
prevented this from working properly (including segfaults) but one thing to note
|
||
is that if you pass two zeroes to <code>theorem_bkp</code> or <code>fibonacci</code> the program
|
||
will enter an infinite loop, printing 0 over and over again; another condition
|
||
where this occurred was fixed but this one should not be fixed. Thank you.</p>
|
||
<h1 id="section-7"><a name="1991"></a>1991</h1>
|
||
<h2 id="buzzard"><a name="1991_buzzard"></a>1991/buzzard</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-8">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1991buzzardbuzzard.c">Source code: <a href="1991/buzzard/buzzard.c">1991/buzzard/buzzard.c</a></h3>
|
||
<h3 id="information-1991buzzardindex.html">Information: <a href="1991/buzzard/index.html">1991/buzzard/index.html</a></h3>
|
||
<p>If the maze file cannot be opened, either because the path specified does not
|
||
exist or because the default (whatever the source file was at compilation time)
|
||
file does not exist in the directory, this program will very likely crash.</p>
|
||
<p>This is a feature, not a bug.</p>
|
||
<h2 id="westley-1"><a name="1991_westley"></a>1991/westley</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-9">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1991westleywestley.c">Source code: <a href="1991/westley/westley.c">1991/westley/westley.c</a></h3>
|
||
<h3 id="information-1991westleyindex.html">Information: <a href="1991/westley/index.html">1991/westley/index.html</a></h3>
|
||
<p>There is a very simple way to always win. The program doesn’t catch you and as
|
||
someone called Cody’s late grandmother said to him: ‘it’s not cheating unless
|
||
you’re caught’. :-)</p>
|
||
<p>Please don’t try and fix it as it’s not a bug and was actually documented as a
|
||
possibility. Can you find out how? There’s also a way to make it so that even
|
||
when you’re cheating it ends up winning! Can you figure that out as well?</p>
|
||
<h1 id="section-8"><a name="1992"></a>1992</h1>
|
||
<h2 id="adrian"><a name="1992_adrian"></a>1992/adrian</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-10">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1992adrianadrian.c">Source code: <a href="1992/adrian/adrian.c">1992/adrian/adrian.c</a></h3>
|
||
<h3 id="information-1992adrianindex.html">Information: <a href="1992/adrian/index.html">1992/adrian/index.html</a></h3>
|
||
<p>The author stated that if the file cannot be opened then it will print a system
|
||
error but this is not the case unless it’s showing a fault. However this was
|
||
instead fixed by Cody as part of another problem that was detected so that the
|
||
program just exits 1 if the file cannot be opened.</p>
|
||
<p>Also, if <em>some</em> of the programs are not given an arg they will very likely crash
|
||
or do something funny. For instance <code>adsleep</code> and <code>adbasename</code>. This is very
|
||
simple to fix but the author explicitly noted that this will segfault and it is
|
||
that that is the error message.</p>
|
||
<p>Another thing is that the code:</p>
|
||
<div class="sourceCode" id="cb14"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a>printf<span class="op">((</span>W<span class="op">,</span>Y<span class="op">));</span></span></code></pre></div>
|
||
<p>appears to be wrong because <code>W</code> is a <code>FILE *</code> and <code>Y</code> is a <code>char[]</code> but if one
|
||
changes it to use <code>fprintf()</code> on the file (which, incidentally, is opened in
|
||
read only mode which is another reason) with the <code>%s</code> specifier it will make
|
||
<code>adhead</code> not work: it’ll print nothing at all! So this code should not be
|
||
changed either even if it appears to be wrong. Notice too a curious thing: if
|
||
you did change it to fprintf, even if you have the right number of args, you’d
|
||
have to remove the outer <code>()</code> pair.</p>
|
||
<h2 id="albert"><a name="1992_albert"></a>1992/albert</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-5">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1992albertalbert.c">Source code: <a href="1992/albert/albert.c">1992/albert/albert.c</a></h3>
|
||
<h3 id="information-1992albertindex.html">Information: <a href="1992/albert/index.html">1992/albert/index.html</a></h3>
|
||
<p>Leo Broukhis, before he was an IOCCC judge, sent the IOCCC judges an email:</p>
|
||
<pre><code>From: leo _at_ zycad -dot- com (Leo Broukhis)
|
||
Date: Tue, 30 Jan 96 17:37:51 PST
|
||
To: judges _at_ toad -dot- com
|
||
Subject: IOCCC 1992 - a bug
|
||
|
||
Dear Judges,
|
||
|
||
albert.c (even in its fixed form) still has a bug. Although I don't
|
||
remember the number that exposed the bug (afair, resulting in coredump)
|
||
in albert.orig.c that has been fixed in albert.c,
|
||
|
||
've found a number exposing another bug: 10000000001 (that's 9 0's).
|
||
Both albert and albert.orig loop without printing anything, although
|
||
the first factor is 101 and is usually found in an instant.</code></pre>
|
||
<p>A quick debugging session from Cody suggests that the problem with this value
|
||
is that:</p>
|
||
<div class="sourceCode" id="cb16"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span> ppp<span class="op">-></span>qq<span class="op">!=</span><span class="dv">48</span> <span class="op">)</span> <span class="cf">return</span><span class="op">;</span></span></code></pre></div>
|
||
<p>is never reached because the value is never 48 (it is in other cases but not for
|
||
the example input). It varies in value at this point. Observe that the next
|
||
lines of code are:</p>
|
||
<div class="sourceCode" id="cb17"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="cf">while</span> <span class="op">(</span> ppp<span class="op">-></span>qq<span class="op">==</span><span class="dv">48</span> <span class="op">)</span></span>
|
||
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
|
||
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%ld\n</span><span class="st">"</span><span class="op">,</span>qqq<span class="op">-</span><span class="dv">45</span><span class="op">);</span></span>
|
||
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span>pp <span class="op">=</span> ppp<span class="op">;</span></span>
|
||
<span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a> ppp <span class="op">=</span> ppp<span class="op">-></span>p<span class="op">;</span></span>
|
||
<span id="cb17-6"><a href="#cb17-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
|
||
<p>so it is expected that that value is 48, before printing the numbers, but if
|
||
it’s not it should not proceed at all, not even to go past that loop. In other
|
||
words that loop should always be entered for at least one iteration. The check
|
||
for the <code>!= 48</code> is also required.</p>
|
||
<p>Perhaps more useful to know is that at this point in the code the code:</p>
|
||
<div class="sourceCode" id="cb18"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(((((</span> <span class="op">!(</span>aa<span class="op">=</span>setjmp<span class="op">(</span>ppp<span class="op">-></span>ppp<span class="op">))||</span>aa<span class="op">==</span>aaaaaa <span class="op">)))))</span></span></code></pre></div>
|
||
<p>appears to be entered because of the return value of <code>setjmp()</code>, not the other
|
||
condition.</p>
|
||
<p>The alt version does fix the problem but it is not obfuscated and not like the
|
||
entry itself. Can you fix the actual entry? You are welcome to try and do so.</p>
|
||
<h2 id="gson"><a name="1992_gson"></a>1992/gson</h2>
|
||
<h3 id="status-uses-gets---change-to-fgets-if-possible-1">STATUS: uses gets() - change to fgets() if possible</h3>
|
||
<h3 id="source-code-1992gsongson.c">Source code: <a href="1992/gson/gson.c">1992/gson/gson.c</a></h3>
|
||
<h3 id="information-1992gsonindex.html1992gsonindex.html">Information: [1992/gson/index.html])(1992/gson/index.html)</h3>
|
||
<p>Cody changed it so that the buffer size is <code>ARG_MAX+1</code> to try and get past the
|
||
problem of <code>gets()</code> being used in a more complex way.</p>
|
||
<p>It would be ideal if it were to use <code>fgets()</code> though. This will probably be
|
||
looked at later but you’re welcome to try and fix this too! A tip on how
|
||
<code>gets()</code> is being used from Cody:</p>
|
||
<p>Previously it had a buffer size of 256 which could easily overflow. In this
|
||
entry <code>gets(3)</code> is used in a more complicated way: first <code>m</code> is set to <code>*++p</code> in
|
||
a for loop where <code>p</code> is argv. Later <code>m</code> is set to point to <code>h</code> which was of size
|
||
256. <code>gets(3)</code> is called as <code>m = gets(m)</code>) but trying to change it to use
|
||
<code>fgets(3)</code> proved more a problem. Since the input must come from the command
|
||
line Cody changed the buffer size to <code>ARG_MAX+1</code> which should be enough (again
|
||
theoretically) especially since the command expects redirecting a dictionary
|
||
file as part of the command line. This also makes it possible for longer strings
|
||
to be read (in case the <code>gets(3)</code> was not used in a loop).</p>
|
||
<h2 id="kivinen"><a name="1992_kivinen"></a>1992/kivinen</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-6">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1992kivinenkivinen.c">Source code: <a href="1992/kivinen/kivinen.c">1992/kivinen/kivinen.c</a></h3>
|
||
<h3 id="information-1992kivinenindex.html">Information: <a href="1992/kivinen/index.html">1992/kivinen/index.html</a></h3>
|
||
<p>When you start the program everything starts to move over to the right side and
|
||
then ends. <a href="authors.html#Yusuke_Endoh">Yusuke Endoh</a> pointed out that if you
|
||
click the mouse it takes it back towards the centre.</p>
|
||
<p>If you want to try and fix this (mis)feature, you are welcome to try.</p>
|
||
<h2 id="lush"><a name="1992_lush"></a>1992/lush</h2>
|
||
<h3 id="status-doesnt-work-with-some-compilers---please-provide-alternative-code-or-fix-for-more-compilers-1">STATUS: doesn’t work with some compilers - please provide alternative code or fix for more compilers</h3>
|
||
<h3 id="source-code-1992lushlush.c">Source code: <a href="1992/lush/lush.c">1992/lush/lush.c</a></h3>
|
||
<h3 id="information-1992lushindex.html">Information: <a href="1992/lush/index.html">1992/lush/index.html</a></h3>
|
||
<p>We used a patch from <a href="authors.html#Yusuke_Endoh">Yusuke Endoh</a> to get this to
|
||
work but it only works with gcc. Cody removed the warnings of <code>gets()</code> and
|
||
provided a script to run the entry properly.</p>
|
||
<p>Unfortunately due to the way the entry works and the fact that other compilers
|
||
like clang have different warnings and errors this simply does not work with
|
||
them.</p>
|
||
<p>Some tips from Cody:</p>
|
||
<p>This entry relies on specific compiler warnings. With gcc it will look something
|
||
like:</p>
|
||
<pre><code>[...]
|
||
lush.c: In function 'main':
|
||
lush.c:40: warning: "f" redefined
|
||
40 | main
|
||
|
|
||
lush.c:1: note: this is the location of the previous definition
|
||
1 | #define gets(_) fgets((_),999,stdin)
|
||
|
|
||
lush.c:42: warning: "f" redefined
|
||
42 | #define f 001:
|
||
|
|
||
lush.c:40: note: this is the location of the previous definition
|
||
40 | main
|
||
|
|
||
lush.c:44: warning: "f" redefined
|
||
44 | #define f 100:
|
||
|
|
||
lush.c:42: note: this is the location of the previous definition
|
||
42 | #define f 001:
|
||
|
|
||
lush.c:45: warning: "f" redefined
|
||
45 | _[i--
|
||
|
|
||
lush.c:44: note: this is the location of the previous definition
|
||
44 | #define f 100:
|
||
|
|
||
lush.c:46: warning: "f" redefined
|
||
46 | #define f 126:
|
||
|
|
||
lush.c:45: note: this is the location of the previous definition
|
||
45 | _[i--
|
||
|</code></pre>
|
||
<p>Now one can use <code>sed</code> to get the <code>warning:</code> line correct but there is more to it
|
||
than that. For instance this is what it looks like with clang:</p>
|
||
<pre><code>lush.c:40:9: warning: 'f' macro redefined [-Wmacro-redefined]
|
||
#define f 001:
|
||
^
|
||
lush.c:1:9: note: previous definition is here
|
||
#define f 000:
|
||
^
|
||
lush.c:42:9: warning: 'f' macro redefined [-Wmacro-redefined]
|
||
#define f 100:
|
||
^
|
||
lush.c:40:9: note: previous definition is here
|
||
#define f 001:
|
||
^</code></pre>
|
||
<p>As you might see the part under the <code>warning:</code> line is different.</p>
|
||
<p>The entry is supposed to show warnings and then print:</p>
|
||
<pre><code>Hello World.</code></pre>
|
||
<p>Can you help us?</p>
|
||
<h2 id="vern"><a name="1992_vern"></a>1992/vern</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-11">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1992vernvern.c">Source code: <a href="1992/vern/vern.c">1992/vern/vern.c</a></h3>
|
||
<h3 id="information-1992vernindex.html">Information: <a href="1992/vern/index.html">1992/vern/index.html</a></h3>
|
||
<p>When your own checkmate is imminent it prints <code>"Har har"</code> but does not exit so
|
||
it can ‘rub your nose in defeat’, as the author puts it. You will have to exit
|
||
it yourself through ctrl-c or killing it in some other fashion.</p>
|
||
<h2 id="westley-2"><a name="1992_westley"></a>1992/westley</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-12">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1992westleywestley.c">Source code: <a href="1992/westley/westley.c">1992/westley/westley.c</a></h3>
|
||
<h3 id="information-1992westleyindex.html">Information: <a href="1992/westley/index.html">1992/westley/index.html</a></h3>
|
||
<p>Cody improved the usability of this program by making it so that as long as the
|
||
terminal columns is >= 80 it will display properly, rather than having to wrap
|
||
at 80 columns. However due to the nature of the program if the terminal is < 80
|
||
in column width it will not display right. To see the number of columns in your
|
||
terminal try:</p>
|
||
<div class="sourceCode" id="cb22"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="va">$COLUMNS</span></span></code></pre></div>
|
||
<h3 id="status-known-bug---please-help-us-fix-7">STATUS: known bug - please help us fix</h3>
|
||
<p>The author suggested that the alternate version, which Cody added (but fixed for
|
||
modern systems), should print</p>
|
||
<div class="sourceCode" id="cb23"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a>main<span class="op">(</span>l<span class="op">,</span>a<span class="op">,</span>n<span class="op">,</span>d<span class="op">)...</span></span>
|
||
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a><span class="op">[</span>A M E R I C A<span class="op">]...</span></span></code></pre></div>
|
||
<p>…going down the left edge if your terminal auto-wraps at 80 characters.</p>
|
||
<p>This however does not seem to work. It does not appear to be because of the fix
|
||
for modern systems as it doesn’t work for gcc either, even before any changes.
|
||
This might be a misunderstanding or it might be that having 80 columns (resized)
|
||
does not count (though the output before the fix of the 80 column requirement
|
||
showed was correct when at 80-columns so it seems like this could be a bug if
|
||
not a misunderstanding).</p>
|
||
<h1 id="section-9"><a name="1993"></a>1993</h1>
|
||
<h3 id="status-inabiaf---please-do-not-fix-13">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1993antant.c">Source code: <a href="1993/ant/ant.c">1993/ant/ant.c</a></h3>
|
||
<h3 id="information-1993antindex.html">Information: <a href="1993/ant/index.html">1993/ant/index.html</a></h3>
|
||
<p>The author stated that:</p>
|
||
<pre><code>The expression `(a*)*` compiles but loops forever.
|
||
|
||
There is no check for trailing backslash (`\`) in the pattern.
|
||
|
||
There is no check for unbalanced brackets. Omitting a closing bracket
|
||
will generate a "Pattern too long" error, which is not the real error.</code></pre>
|
||
<h3 id="status-missing-file---please-provide-it">STATUS: missing file - please provide it</h3>
|
||
<p>The author wrote in the documentation file <a href="1993/ant/ant.txt">ant.txt</a> that
|
||
there is a version of the code that is not obfuscated. This file, <code>agag.c</code> does
|
||
not exist in the archive. Do you have it? Please provide it!</p>
|
||
<h3 id="status-known-bug---please-help-us-fix-8">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1993cmillscmills.c">Source code: <a href="1993/cmills/cmills.c">1993/cmills/cmills.c</a></h3>
|
||
<h3 id="information-1993cmillsindex.html">Information: <a href="1993/cmills/index.html">1993/cmills/index.html</a></h3>
|
||
<p>In multiple platforms, both macOS and also linux (in particular a RHEL 9.3
|
||
system), this entry just shows a blank screen.</p>
|
||
<p>Can you fix it? We welcome your help.</p>
|
||
<h2 id="lmfjyh"><a name="1993_lmfjyh"></a>1993/lmfjyh</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-14">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1993lmfjyhlmfjyh.c">Source code: <a href="1993/lmfjyh/lmfjyh.c">1993/lmfjyh/lmfjyh.c</a></h3>
|
||
<h3 id="information-1993lmfjyhindex.html">Information: <a href="1993/lmfjyh/index.html">1993/lmfjyh/index.html</a></h3>
|
||
<p>This entry relied on a bug in gcc that was fixed with gcc version 2.3.3. This
|
||
cannot be fixed for modern systems as the bug is long gone.</p>
|
||
<p>An alternate version that will work for modern systems, however, does exist. See
|
||
the index.html file for details.</p>
|
||
<h2 id="rince"><a name="1993_rince"></a>1993/rince</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-15">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1993rincerince.c">Source code: <a href="1993/rince/rince.c">1993/rince/rince.c</a></h3>
|
||
<h3 id="information-1993rinceindex.html">Information: <a href="1993/rince/index.html">1993/rince/index.html</a></h3>
|
||
<p>Although the code checks if the file can be opened or not, badly formatted files
|
||
will cause problems. No other checks are performed either.</p>
|
||
<p>There is no end of game checking method so you will have to quit the game
|
||
through ctrl-c or such.</p>
|
||
<h2 id="schnitzi"><a name="1993_schnitzi"></a>1993/schnitzi</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-16">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1993schnitzischnitzi.c">Source code: <a href="1993/schnitzi/schnitzi.c">1993/schnitzi/schnitzi.c</a></h3>
|
||
<h3 id="information-1993schnitziindex.html">Information: <a href="1993/schnitzi/index.html">1993/schnitzi/index.html</a></h3>
|
||
<p>If the file cannot be opened it will very likely segfault. This should not be
|
||
fixed except for an exercise to yourself, should you wish to try.</p>
|
||
<p>This program uses <code>system(3)</code> so if you provide invalid characters in the
|
||
question you might cause an error. For instance don’t do this:</p>
|
||
<div class="sourceCode" id="cb25"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./schnitzi schnitzi.info</span>
|
||
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="ex">This</span> program answers questions about paragraphs</span>
|
||
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a><span class="ex">of</span> text posed to it in English. It is written</span>
|
||
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a><span class="er">in</span> <span class="ex">C.</span> Mark Schnitzius is the author of this</span>
|
||
<span id="cb25-5"><a href="#cb25-5" aria-hidden="true" tabindex="-1"></a><span class="ex">program.</span></span>
|
||
<span id="cb25-6"><a href="#cb25-6" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb25-7"><a href="#cb25-7" aria-hidden="true" tabindex="-1"></a><span class="ex">The</span> Loch Ness monster has been captured. Elvis</span>
|
||
<span id="cb25-8"><a href="#cb25-8" aria-hidden="true" tabindex="-1"></a><span class="ex">is</span> alive. Hostler was a woman. The NASA moon</span>
|
||
<span id="cb25-9"><a href="#cb25-9" aria-hidden="true" tabindex="-1"></a><span class="ex">landings</span> were clearly faked.</span>
|
||
<span id="cb25-10"><a href="#cb25-10" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb25-11"><a href="#cb25-11" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb25-12"><a href="#cb25-12" aria-hidden="true" tabindex="-1"></a><span class="ex">?</span> What is foo<span class="st">'?</span></span></code></pre></div>
|
||
<p>because doing so will result in something like:</p>
|
||
<pre><code>sh: -c: line 0: unexpected EOF while looking for matching `''
|
||
sh: -c: line 1: syntax error: unexpected end of file</code></pre>
|
||
<p>with the program terminating. Other characters will also cause this problem.</p>
|
||
<p>Of course if you do something like:</p>
|
||
<pre><code>What is 'foo'?</code></pre>
|
||
<p>it will work fine.</p>
|
||
<h3 id="status-inabiaf---please-do-not-fix-17">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1993vanbvanb.c">Source code: <a href="1993/vanb/vanb.c">1993/vanb/vanb.c</a></h3>
|
||
<h3 id="information-1993vanbindex.html">Information: <a href="1993/vanb/index.html">1993/vanb/index.html</a></h3>
|
||
<p>No spaces are allowed in the expression.</p>
|
||
<p>The program does no error checking so erroneous expressions will produce
|
||
spurious results.</p>
|
||
<p>The unary <code>-</code> is an operator so decimal <code>-46</code> should be entered as <code>-d46</code> and
|
||
not <code>d-46</code>.</p>
|
||
<h1 id="section-10"><a name="1994"></a>1994</h1>
|
||
<h2 id="dodsond2"><a name="1994_dodsond2"></a>1994/dodsond2</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-18">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1994dodsond2dodsond2.c">Source code: <a href="1994/dodsond2/dodsond2.c">1994/dodsond2/dodsond2.c</a></h3>
|
||
<h3 id="information-1994dodsond2index.html">Information: <a href="1994/dodsond2/index.html">1994/dodsond2/index.html</a></h3>
|
||
<p>When you initiate shooting via the <code>s</code> command you immediately lose an arrow
|
||
<em>before you choose where to shoot</em>.</p>
|
||
<p>When you shoot it will move you to that room so if you end up shooting into a
|
||
pit room you will end up dying even though you didn’t explicitly move there.</p>
|
||
<h2 id="ldb"><a name="1994_ldb"></a>1994/ldb</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-19">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1994ldbldb.c">Source code: <a href="1994/ldb/ldb.c">1994/ldb/ldb.c</a></h3>
|
||
<h3 id="information-1994ldbindex.html">Information: <a href="1994/ldb/index.html">1994/ldb/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed this to compile
|
||
with modern systems (see the <a href="thanks-for-help.html">thanks</a> file for
|
||
what had to change) but the entry also used <code>gets()</code> which in some systems would
|
||
print out a warning along with the output of the program. Naturally it could
|
||
also overflow long lines. Cody changed it to <code>fgets()</code> to prevent the display
|
||
problem but this introduces another problem namely that newlines can be printed
|
||
if the line length < 231.</p>
|
||
<p>This seems like a worthy compromise to not have messed up output and although it
|
||
would be ideal for it to never print a newline unless that’s the line itself it
|
||
might be tampering too much with the entry as it’s not a real problem and as a
|
||
one liner it’s already quite long.</p>
|
||
<h2 id="schnitzi-1"><a name="1994_schnitzi"></a>1994/schnitzi</h2>
|
||
<h3 id="status-uses-gets---change-to-fgets-if-possible-2">STATUS: uses gets() - change to fgets() if possible</h3>
|
||
<h3 id="source-code-1994schnitzischnitzi.c">Source code: <a href="1994/schnitzi/schnitzi.c">1994/schnitzi/schnitzi.c</a></h3>
|
||
<h3 id="information-1994schnitziindex.html">Information: <a href="1994/schnitzi/index.html">1994/schnitzi/index.html</a></h3>
|
||
<p>NOTE: the generated code of all versions, when fed its own source, will differ
|
||
even when it works. See the author’s remarks in the index.html for details.
|
||
Increasing the buffer size and having it, when fed its own source code,
|
||
generate code that will compile with the same buffer size is difficult: it just
|
||
uses the original size. Cody explains this further down.</p>
|
||
<p>Getting it to use <code>fgets()</code> is even harder as when fed its own code it will
|
||
generate code that cannot even compile let alone use <code>fgets(3)</code>.</p>
|
||
<p>In both cases, changing the buffer size and changing it to use <code>fgets(3)</code>, will
|
||
cause compilation errors without other adjustments.</p>
|
||
<p>See the below magic for details. Along with the author’s remarks in the
|
||
index.html file it might prove possible to get it to use <code>fgets(3)</code>. Cody,
|
||
writing this on 02 November 2023, only just noticed the author’s remarks and
|
||
will later on look at this if nobody takes up the challenge. More important work
|
||
like getting to a place that the next contest can run must be done first.</p>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> explains the magic of
|
||
how this entry works, which will be necessary if this entry is to be fixed,
|
||
below.</p>
|
||
<p>You might wish to run the command:</p>
|
||
<div class="sourceCode" id="cb28"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> diff_orig_prog</span></code></pre></div>
|
||
<p>to see what had to change for the buffer size, when looking at the below.
|
||
Furthermore you will want to look at:</p>
|
||
<div class="sourceCode" id="cb29"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="fu">diff</span> schnitzi.alt.c schnitzi.alt2.c</span></code></pre></div>
|
||
<p>as the <code>fgets()</code> version can compile it just can’t generate compilable code (let
|
||
alone using <code>fgets()</code>) when fed itself (to reiterate, just changing the call to
|
||
<code>fgets(3)</code> does not mean it can compile and there’s a further problem in that
|
||
<code>fgets(3)</code> retains the newline whereas <code>gets(3)</code> does not). Nevertheless looking
|
||
at these commands will be of help to understand how it works.</p>
|
||
<p>For the alternate versions the other functionality is unaffected.</p>
|
||
<h3 id="the-magic-of-1994schnitzi-and-how-it-flips-text">The magic of <a href="1994/schnitzi/schnitzi.c">1994/schnitzi</a> and how it flips text</h3>
|
||
<p>The problem is getting the generated code to use <code>fgets()</code> (once it even
|
||
compiles which was easy to do) and also have the updated buffer size be the
|
||
same (which was easy to do too at least in the original version). The generated
|
||
output, when changed to <code>fgets()</code> failed to compile and it also used <code>gets(3)</code>
|
||
and these are the bugs here.</p>
|
||
<p>The buffer size, when using <code>gets()</code> is still the same but as noted above the
|
||
original code has had a buffer size increase.</p>
|
||
<p>The real problem is with formatting the code. Take a look at the interesting
|
||
comment as well as the <code>int r=0,x,y=0</code> at the top of the file. If you look at
|
||
each column go down that column you can see how it spells out the code! For
|
||
instance the first column looks like:</p>
|
||
<pre><code>i
|
||
n
|
||
c
|
||
l
|
||
u
|
||
d
|
||
e
|
||
|
||
<
|
||
s
|
||
t
|
||
d
|
||
i
|
||
o
|
||
.
|
||
h
|
||
></code></pre>
|
||
<p>If you join the lines you end up with:</p>
|
||
<div class="sourceCode" id="cb31"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span></code></pre></div>
|
||
<p>If you look at column 25 which is the end of the word ‘mh111’ and you go down to
|
||
the next row you’ll see a 0 and if you go one row down another 0. This is the
|
||
buffer size, 100, for <code>u</code>! The column to the left is the same for the <code>t</code>
|
||
variable.</p>
|
||
<p>Thus it seems that in order to get the generated output correct one needs to
|
||
provide the correct input in comments or possibly by rearranging some of the
|
||
code (this was actually required to make the generated code compile at all when
|
||
changing the buffer size, see below).</p>
|
||
<h3 id="important-points">Important points:</h3>
|
||
<p>Getting this entry to use <code>fgets()</code> is easy but the problem is you’re supposed
|
||
to be able to feed the source to the program and the output of that will be
|
||
compilable. It however will create compiler errors. So it’s not just changing
|
||
the code to get it to use fgets()! I (Cody) already did this before I noticed
|
||
the other part which is why I rolled that part back. I did increase the buffer
|
||
size but that only works on the original source.</p>
|
||
<p>To say just how sensitive this entry is: even a space, lack of space or a
|
||
character, wrong character, lack of character or character in the wrong place
|
||
can cause a compilation error! Make sure that the output of:</p>
|
||
<div class="sourceCode" id="cb32"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./schnitzi</span> <span class="op"><</span> schnitzi.c</span></code></pre></div>
|
||
<p>can be compiled and the output of that new program when fed itself can also be
|
||
compiled!</p>
|
||
<h2 id="shapiro"><a name="1994_shapiro"></a>1994/shapiro</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-20">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1994shapiroshapiro.c">Source code: <a href="1994/shapiro/shapiro.c">1994/shapiro/shapiro.c</a></h3>
|
||
<h3 id="information-1994shapiroindex.html">Information: <a href="1994/shapiro/index.html">1994/shapiro/index.html</a></h3>
|
||
<p>This program will likely crash if the source code file (by the name of the file
|
||
that’s compiled) cannot be opened in the directory it is run from.</p>
|
||
<h3 id="status-missing-file---please-provide-it-1">STATUS: missing file - please provide it</h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> noted that the
|
||
index.html file refers to an alternative version of the code that is not
|
||
obfuscated but it is missing from the entry directory and the archive. Do you
|
||
have this file?</p>
|
||
<p>We would be grateful if you could provide it to us. If you can provide this
|
||
file you might consider removing this entry from this file as well but if not
|
||
we’ll take care of it.</p>
|
||
<h3 id="important-reminder-and-a-note-about-the--1-value-check-for-getc">Important reminder and a note about the <code>-1</code> value check for <code>getc()</code>:</h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed the code to not
|
||
use <code>-1</code> for the return value of <code>getc()</code>; this is important because <code>EOF</code> is
|
||
<strong>NOT</strong> guaranteed to be <code>-1</code> but rather any negative value. On systems where
|
||
<code>EOF != -1</code> the program would enter an infinite loop until the program crashed,
|
||
by chance reads a <code>-1</code> or was killed (it is for this same reason that one should
|
||
not use <code>EOF</code> for the <code>getopt()</code> functions as they return <code>-1</code> when all options
|
||
are parsed (for details on the definition of <code>EOF</code> see <code>7.21 Input/output<stdio.h></code> subsection 1 of the standard)).</p>
|
||
<p>An interesting problem occurred where changing the <code>-1</code> to <code>EOF</code> caused both
|
||
<code>warning: illegal character encoding in string literal</code> and <code>error: source file is not valid UTF-8</code>. But since <code>EOF</code> is simply an int < 0 and making the loop
|
||
condition check that the return value is >= 0 does not cause a compilation error
|
||
and it functions correctly it will address the systems where <code>EOF != -1</code> just as
|
||
if it checked for <code>!= EOF</code>.</p>
|
||
<p>Since it works there is no need to fix this except for a challenge to yourself.</p>
|
||
<h2 id="tvr"><a name="1994_tvr"></a>1994/tvr</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-9">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1994tvrtvr.c">Source code: <a href="1994/tvr/tvr.c">1994/tvr/tvr.c</a></h3>
|
||
<h3 id="information-1994tvrindex.html">Information: <a href="1994/tvr/index.html">1994/tvr/index.html</a></h3>
|
||
<p>The judges said the following in their remarks:</p>
|
||
<pre><code>The fractally minded may be able to detect that mode 0 does not calculate
|
||
Mandelbrot/Julian sets correctly. Can you find the bug? Better still, can you
|
||
fix it without breaking something else?</code></pre>
|
||
<p>You are welcome to try and fix it and open a pull request, providing that it
|
||
doesn’t break something else.</p>
|
||
<h1 id="section-11"><a name="1995"></a>1995</h1>
|
||
<h2 id="cdua"><a name="1995_cdua"></a>1995/cdua</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-21">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1995cduacdua.c">Source code: <a href="1995/cdua/cdua.c">1995/cdua/cdua.c</a></h3>
|
||
<h3 id="information-1995cduaindex.html">Information: <a href="1995/cdua/index.html">1995/cdua/index.html</a></h3>
|
||
<p>This did not originally compile under macOS and after it did compile under
|
||
macOS, it crashed. <a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a>
|
||
fixed these problems.</p>
|
||
<p>It should be noted however that there is a condition where the program will
|
||
prompt you to press return again. This was thought to be a bug but looking at
|
||
the code it can clearly be seen that if <code>g - a</code> is 0 then the message is
|
||
supposed to be printed again and one is supposed to press a key as at that point
|
||
it calls <code>getchar()</code> via the pointer <code>m</code>. So this is a feature not a bug.</p>
|
||
<h2 id="leo"><a name="1995_leo"></a>1995/leo</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-10">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-1995leoleo.c">Source code: <a href="1995/leo/leo.c">1995/leo/leo.c</a></h3>
|
||
<h3 id="information-1995leoindex.html">Information: <a href="1995/leo/index.html">1995/leo/index.html</a></h3>
|
||
<p>The judges suggested that the following commands should result in output:</p>
|
||
<div class="sourceCode" id="cb34"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./leo</span> 1 <span class="kw">|</span> <span class="fu">cat</span> <span class="at">-</span> /dev/tty <span class="kw">|</span> <span class="fu">gs</span> <span class="at">-</span></span>
|
||
<span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a><span class="ex">./leo</span> 37 80 <span class="kw">|</span> <span class="fu">cat</span> <span class="at">-</span> /dev/tty <span class="kw">|</span> <span class="fu">gs</span> <span class="at">-</span></span></code></pre></div>
|
||
<p>The first one can work if one does instead:</p>
|
||
<div class="sourceCode" id="cb35"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="st">""</span> <span class="kw">|</span> <span class="ex">./leo</span> 1 <span class="op">></span> foo.ps</span>
|
||
<span id="cb35-2"><a href="#cb35-2" aria-hidden="true" tabindex="-1"></a><span class="fu">gs</span> foo.ps</span></code></pre></div>
|
||
<p>but it is supposed to work in the pipeline as is. The second one does not appear
|
||
to work at all even if one redirects to a file (like the workaround for the
|
||
first) as it appears to just block.</p>
|
||
<p>It is not known if this is platform specific but this was observed in macOS and
|
||
it would be good if it was fixed.</p>
|
||
<h2 id="savastio"><a name="1995_savastio"></a>1995/savastio</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-22">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1995savastiosavastio.c">Source code: <a href="1995/savastio/savastio.c">1995/savastio/savastio.c</a></h3>
|
||
<h3 id="information-1995savastioindex.html">Information: <a href="1995/savastio/index.html">1995/savastio/index.html</a></h3>
|
||
<p>This program expects a POSITIVE number. If you specify a negative number it will
|
||
not show any output, stuck in a loop.</p>
|
||
<h2 id="vanschnitz"><a name="1995_vanschnitz"></a>1995/vanschnitz</h2>
|
||
<h3 id="status-missing-file---please-provide-it-2">STATUS: missing file - please provide it</h3>
|
||
<h3 id="source-code-1995vanschnitzvanschnitz.c">Source code: <a href="1995/vanschnitz/vanschnitz.c">1995/vanschnitz/vanschnitz.c</a></h3>
|
||
<h3 id="information-1995vanschnitzindex.html">Information: <a href="1995/vanschnitz/index.html">1995/vanschnitz/index.html</a></h3>
|
||
<p>The authors stated that they included a version that allows people with just K&R
|
||
compilers to use the program but this file is missing. Can you provide it?</p>
|
||
<p>We would appreciate anyone who has it or even just knows the name! Thank you.</p>
|
||
<h1 id="section-12"><a name="1996"></a>1996</h1>
|
||
<h2 id="gandalf"><a name="1996_gandalf"></a>1996/gandalf</h2>
|
||
<h3 id="status-missing-or-dead-link---please-provide-them-1">STATUS: missing or dead link - please provide them</h3>
|
||
<h3 id="source-code-1996gandalfgandalf.c">Source code: <a href="1996/gandalf/gandalf.c">1996/gandalf/gandalf.c</a></h3>
|
||
<h3 id="information-1996gandalfindex.html">Information: <a href="1996/gandalf/index.html">1996/gandalf/index.html</a></h3>
|
||
<p>The link was http://www.tc3.co.uk/~gandalf/G.HTML but this no longer exists as
|
||
it was instead requiring a login / password.</p>
|
||
<p>Do you have an updated link? We welcome your help!</p>
|
||
<h2 id="huffman"><a name="1996_huffman"></a>1996/huffman</h2>
|
||
<h3 id="status-uses-gets---change-to-fgets-if-possible-3">STATUS: uses gets() - change to fgets() if possible</h3>
|
||
<h3 id="source-code-1996huffmanhuffman.c">Source code: <a href="1996/huffman/huffman.c">1996/huffman/huffman.c</a></h3>
|
||
<h3 id="information-1996huffmanindex.html">Information: <a href="1996/huffman/index.html">1996/huffman/index.html</a></h3>
|
||
<p>The changing to using <code>fgets(3)</code> in this entry is a bit more complicated. It can
|
||
almost be done except that some of the output of the
|
||
<a href="1996/huffman/try.sh">try.sh</a> is wrong, especially the last one.</p>
|
||
<p>This diff almost does it but not quite:</p>
|
||
<div class="sourceCode" id="cb36"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="kw">diff --git i/1996/huffman/huffman.c w/1996/huffman/huffman.c</span></span>
|
||
<span id="cb36-2"><a href="#cb36-2" aria-hidden="true" tabindex="-1"></a>index a5745bc7f4fa28b834c004f4cf19633e40ad9165..5e5e5334f33f9dbd95c70eddece3189d9bcff5e9 100644</span>
|
||
<span id="cb36-3"><a href="#cb36-3" aria-hidden="true" tabindex="-1"></a><span class="dt">--- i/1996/huffman/huffman.c</span></span>
|
||
<span id="cb36-4"><a href="#cb36-4" aria-hidden="true" tabindex="-1"></a><span class="dt">+++ w/1996/huffman/huffman.c</span></span>
|
||
<span id="cb36-5"><a href="#cb36-5" aria-hidden="true" tabindex="-1"></a><span class="dt">@@ -1,15 +1,16 @@</span></span>
|
||
<span id="cb36-6"><a href="#cb36-6" aria-hidden="true" tabindex="-1"></a> #define x char</span>
|
||
<span id="cb36-7"><a href="#cb36-7" aria-hidden="true" tabindex="-1"></a> #define z else</span>
|
||
<span id="cb36-8"><a href="#cb36-8" aria-hidden="true" tabindex="-1"></a> #define w gets</span>
|
||
<span id="cb36-9"><a href="#cb36-9" aria-hidden="true" tabindex="-1"></a><span class="va">+#define gets(b) ((b)[0]='\0',(fgets((b), 100, stdin)))</span></span>
|
||
<span id="cb36-10"><a href="#cb36-10" aria-hidden="true" tabindex="-1"></a> #define r if</span>
|
||
<span id="cb36-11"><a href="#cb36-11" aria-hidden="true" tabindex="-1"></a> #define u int</span>
|
||
<span id="cb36-12"><a href="#cb36-12" aria-hidden="true" tabindex="-1"></a> #define s main</span>
|
||
<span id="cb36-13"><a href="#cb36-13" aria-hidden="true" tabindex="-1"></a> #define v putchar</span>
|
||
<span id="cb36-14"><a href="#cb36-14" aria-hidden="true" tabindex="-1"></a> #define y while</span>
|
||
<span id="cb36-15"><a href="#cb36-15" aria-hidden="true" tabindex="-1"></a> #define t " A?B?K?L?CIF?MSP?E?H?O?R?DJG?NTQ?????U?V?????X???????Z????W??Y??"</span>
|
||
<span id="cb36-16"><a href="#cb36-16" aria-hidden="true" tabindex="-1"></a><span class="st">- s ( ) { x* c , b[ 5 * 72 ]; u a, e , d [ 9</span></span>
|
||
<span id="cb36-17"><a href="#cb36-17" aria-hidden="true" tabindex="-1"></a><span class="va">+ s ( ) { x* c , b[ 5 * 72 ]; u a, e , d [ 9</span></span>
|
||
<span id="cb36-18"><a href="#cb36-18" aria-hidden="true" tabindex="-1"></a> *9 *9 ] ; y (w ( b) ){ r ( 0 [ b] -7 *</span>
|
||
<span id="cb36-19"><a href="#cb36-19" aria-hidden="true" tabindex="-1"></a> 5 ) { c = b ; y ( (* c - 6</span>
|
||
<span id="cb36-20"><a href="#cb36-20" aria-hidden="true" tabindex="-1"></a> * 7 )* * c )c = c+ 1 ; r (( -0 ) [ c ] && w ( b +</span>
|
||
<span id="cb36-21"><a href="#cb36-21" aria-hidden="true" tabindex="-1"></a> 8 * 5* 3 ) && w (b +8 *5 * 6) )</span>
|
||
<span id="cb36-22"><a href="#cb36-22" aria-hidden="true" tabindex="-1"></a> { a = 0; y ( a [ b ]</span></code></pre></div>
|
||
<p>But since it does not for the time being it is advisable to just redirect
|
||
<code>stderr</code> to <code>/dev/null</code> (<code>2>/dev/null</code>).</p>
|
||
<h2 id="jonth"><a name="1996_jonth"></a>1996/jonth</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-23">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1996jonthjonth.c">Source code: <a href="1996/jonth/jonth.c">1996/jonth/jonth.c</a></h3>
|
||
<h3 id="information-1996jonthindex.html">Information: <a href="1996/jonth/index.html">1996/jonth/index.html</a></h3>
|
||
<p>If X is not running this program will very likely crash or do something funny.
|
||
This should NOT be fixed.</p>
|
||
<p>NOTE: the two boards will be on top of each other so you will have to drag one
|
||
off the other so that you can properly play.</p>
|
||
<h3 id="status-missing-or-dead-link---please-provide-them-2">STATUS: missing or dead link - please provide them</h3>
|
||
<p>As well: the link which was http://www.uio.no/~jonth is no longer valid and
|
||
there’s no archive on the Internet Wayback Machine. Do you know of a proper URL?
|
||
We greatly appreciate your help here!</p>
|
||
<h1 id="section-13"><a name="1997"></a>1997</h1>
|
||
<p>There was no IOCCC in 1997.</p>
|
||
<h1 id="section-14"><a name="1998"></a>1998</h1>
|
||
<h2 id="dlowe"><a name="1998_dlowe"></a>1998/dlowe</h2>
|
||
<h3 id="status-missing-or-dead-link---please-provide-them-3">STATUS: missing or dead link - please provide them</h3>
|
||
<h3 id="source-code-1998dlowedlowe.c">Source code: <a href="1998/dlowe/dlowe.c">1998/dlowe/dlowe.c</a></h3>
|
||
<h3 id="information-1998dloweindex.html">Information: <a href="1998/dlowe/index.html">1998/dlowe/index.html</a></h3>
|
||
<p>The domain http://pootpoot.com no longer exists as it once did. The judges have
|
||
given a script that can be used to make a similar page (<strong>warning: not checked
|
||
for security in modern days!</strong>). Do you have a server with enough bandwidth and
|
||
would like to set it up? We’ll gladly thank you in the index.html file and link
|
||
to the page as well! You’ll have IOCCC fame for reviving a pootifier! :-)</p>
|
||
<h2 id="dloweneil"><a name="1998_dloweneil"></a>1998/dloweneil</h2>
|
||
<h3 id="status-missing-or-dead-link---please-provide-them-4">STATUS: missing or dead link - please provide them</h3>
|
||
<h3 id="source-code-1998dloweneildloweneil.c">Source code: <a href="1998/dloweneil/dloweneil.c">1998/dloweneil/dloweneil.c</a></h3>
|
||
<h3 id="information-1998dloweneilindex.html">Information: <a href="1998/dloweneil/index.html">1998/dloweneil/index.html</a></h3>
|
||
<p>See above entry <a href="1998/dlowe/dlowe.c">1998/dlowe</a>.</p>
|
||
<h2 id="schnitzi-2"><a name="1998_schnitzi"></a>1998/schnitzi</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-24">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-1998schnitzischnitzi.c">Source code: <a href="1998/schnitzi/schnitzi.c">1998/schnitzi/schnitzi.c</a></h3>
|
||
<h3 id="information-1998schnitziindex.html">Information: <a href="1998/schnitzi/index.html">1998/schnitzi/index.html</a></h3>
|
||
<p>A point worth considering is that as the number passed into the program gets
|
||
bigger the number of lines of output gets substantially larger. For instance:</p>
|
||
<div class="sourceCode" id="cb37"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./schnitzi 9<span class="kw">|</span><span class="fu">wc</span> <span class="at">-l</span></span>
|
||
<span id="cb37-2"><a href="#cb37-2" aria-hidden="true" tabindex="-1"></a> <span class="ex">771999</span></span></code></pre></div>
|
||
<p>The larger the number the bigger the file can become too, even becoming
|
||
gigabytes in size. The range is checked for <code>>0 && <27</code> as not having this can
|
||
be a problem including a segfault.</p>
|
||
<p>If you use the generated program and do not give enough numbers in input
|
||
something funny will happen, very possibly with different results per run. This
|
||
is in the index.html file as something to try and ponder.</p>
|
||
<h1 id="section-15"><a name="1999"></a>1999</h1>
|
||
<p>There was no IOCCC in 1999.</p>
|
||
<h1 id="section-16"><a name="2000"></a>2000</h1>
|
||
<h2 id="dlowe-1"><a name="2000_dlowe"></a>2000/dlowe</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-11">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-2000dlowedlowe.c">Source code: <a href="2000/dlowe/dlowe.c">2000/dlowe/dlowe.c</a></h3>
|
||
<h3 id="information-2000dloweindex.html">Information: <a href="2000/dlowe/index.html">2000/dlowe/index.html</a></h3>
|
||
<p>The author gives an example command:</p>
|
||
<div class="sourceCode" id="cb38"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="st">"7 P 6 d P P 8 p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span> <span class="kw">|</span> <span class="fu">tr</span> 876 tpo</span></code></pre></div>
|
||
<p>which should print out <code>poot</code> but it doesn’t, not in linux and not in macOS.</p>
|
||
<p>In linux it doesn’t crash but it doesn’t print anything out either.</p>
|
||
<p>In macOS it crashes; it might appear to not crash in macOS but this is because
|
||
of the pipeline. If you remove the <code>| tr 876 tpo</code> part of the command you will
|
||
see that it does indeed crash!</p>
|
||
<p>The reason for this not working is really strange.</p>
|
||
<div class="sourceCode" id="cb39"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="st">"7 P 6 d P P 8 p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span></span>
|
||
<span id="cb39-2"><a href="#cb39-2" aria-hidden="true" tabindex="-1"></a><span class="ex">7668</span></span>
|
||
<span id="cb39-3"><a href="#cb39-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="st">"7 P 6 d P P 8 p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span> <span class="kw">|</span> <span class="fu">grep</span> 7</span>
|
||
<span id="cb39-4"><a href="#cb39-4" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span></span></code></pre></div>
|
||
<p>Why? Is it writing to stdout? Let’s try some other things:</p>
|
||
<div class="sourceCode" id="cb40"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 7668 <span class="kw">|</span> <span class="fu">tr</span> 876 tpo</span>
|
||
<span id="cb40-2"><a href="#cb40-2" aria-hidden="true" tabindex="-1"></a><span class="ex">poot</span></span></code></pre></div>
|
||
<p>Okay so we know that it SHOULD work. But we also know something funny is going on with stdout and the entry. Another experiment:</p>
|
||
<div class="sourceCode" id="cb41"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="st">"7 P 6 d P P 8 p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span> <span class="dv">1</span><span class="op">>&</span><span class="dv">2</span> <span class="kw">|</span> <span class="fu">grep</span> 7</span>
|
||
<span id="cb41-2"><a href="#cb41-2" aria-hidden="true" tabindex="-1"></a><span class="ex">7668</span></span></code></pre></div>
|
||
<p>Okay so now it sees it, <code>grep</code>. But watch!</p>
|
||
<div class="sourceCode" id="cb42"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="st">"7 P 6 d P P 8 p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span> <span class="dv">2</span><span class="op">></span>foo <span class="dv">1</span><span class="op">>&</span><span class="dv">1</span></span>
|
||
<span id="cb42-2"><a href="#cb42-2" aria-hidden="true" tabindex="-1"></a><span class="ex">7668</span></span>
|
||
<span id="cb42-3"><a href="#cb42-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat foo</span></code></pre></div>
|
||
<p>.. so at this hour it does appear to be writing to stdout but yet somehow it doesn’t? But watch:</p>
|
||
<div class="sourceCode" id="cb43"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="st">"7 P 6 d P P 8 p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span> <span class="dv">1</span><span class="op">></span>foo <span class="dv">1</span><span class="op">>&</span><span class="dv">1</span></span>
|
||
<span id="cb43-2"><a href="#cb43-2" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> cat foo</span>
|
||
<span id="cb43-3"><a href="#cb43-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span></span></code></pre></div>
|
||
<p>Well this explains why the <code>tr</code> does not transliterate it to <code>poot</code> but why is
|
||
this happening? Why can’t it be redirected to another file even?</p>
|
||
<p>If it could be figured out why it’s not writing to stdout and yet at the same
|
||
time is writing to stdout one bug could be fixed. Maybe it’s the perl messing
|
||
with things but we don’t know.</p>
|
||
<p>Other commands do work, however, and give the appropriate output, such as:</p>
|
||
<div class="sourceCode" id="cb44"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 1 2 + p <span class="kw">|</span> <span class="ex">./dlowe</span></span>
|
||
<span id="cb44-2"><a href="#cb44-2" aria-hidden="true" tabindex="-1"></a><span class="ex">3</span></span></code></pre></div>
|
||
<p>so something is wrong with some commands/operators.</p>
|
||
<p>Another feature that does work in linux is:</p>
|
||
<div class="sourceCode" id="cb45"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo poot <span class="kw">|</span> <span class="ex">./dlowe</span></span>
|
||
<span id="cb45-2"><a href="#cb45-2" aria-hidden="true" tabindex="-1"></a><span class="ex">poot</span> was here!</span></code></pre></div>
|
||
<p>Can you help fix these problems?</p>
|
||
<p>Cody provided the C code that creates an unformatted perl script that will just
|
||
print ‘unimplemented’ for operators but it seems to work in some other ways (see
|
||
below for how to go further than unimplemented) which is the exact perl from the
|
||
C program except that it has the <code>#!/usr/bin/env perl</code> and <code>use warnings;</code> as
|
||
well. A note below might suggest that doing this creates incomplete perl.
|
||
Anyway:</p>
|
||
<div class="sourceCode" id="cb46"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span>
|
||
<span id="cb46-2"><a href="#cb46-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">void</span><span class="op">)</span></span>
|
||
<span id="cb46-3"><a href="#cb46-3" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
|
||
<span id="cb46-4"><a href="#cb46-4" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"#!/usr/bin/env perl</span><span class="sc">\n</span><span class="st">use warnings;_:$_= <> ; defined or exit; @ARGV"</span></span>
|
||
<span id="cb46-5"><a href="#cb46-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"=split; __:$_= shift;defined or goto _; chomp "</span></span>
|
||
<span id="cb46-6"><a href="#cb46-6" aria-hidden="true" tabindex="-1"></a> <span class="st">";(m*^</span><span class="sc">\\</span><span class="st">x70oO"</span> <span class="st">"</span><span class="sc">\\</span><span class="st">x74$*i)?(pri"</span> <span class="st">"nt </span><span class="sc">\"</span><span class="st">$_ w</span><span class="sc">\\</span><span class="st">x"</span></span>
|
||
<span id="cb46-7"><a href="#cb46-7" aria-hidden="true" tabindex="-1"></a> <span class="st">"61s h</span><span class="sc">\\</span><span class="st">145r</span><span class="sc">\\</span><span class="st">x"</span> <span class="st">"65!</span><span class="sc">\\</span><span class="st">n</span><span class="sc">\"</span><span class="st">):((m*"</span> <span class="st">"^</span><span class="sc">\\</span><span class="st">s</span><span class="sc">\\</span><span class="st">*(-?</span><span class="sc">\\</span><span class="st">d+"</span></span>
|
||
<span id="cb46-8"><a href="#cb46-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"(</span><span class="sc">\\</span><span class="st">.</span><span class="sc">\\</span><span class="st">d+)?)</span><span class="sc">\\</span><span class="st">s"</span> <span class="st">"</span><span class="sc">\\</span><span class="st">*$*)?(push@SS ,$1):(&{chr(((o"</span></span>
|
||
<span id="cb46-9"><a href="#cb46-9" aria-hidden="true" tabindex="-1"></a> <span class="st">"rd)</span><span class="sc">%%</span><span class="st">39)+3**4)x2 } )); goto __; sub ff { @SS= ("</span></span>
|
||
<span id="cb46-10"><a href="#cb46-10" aria-hidden="true" tabindex="-1"></a> <span class="st">")} sub __{print </span><span class="sc">\"</span><span class="st">stack empty</span><span class="sc">\\</span><span class="st">"</span> <span class="st">"n</span><span class="sc">\"</span><span class="st">} sub ss{$#"</span></span>
|
||
<span id="cb46-11"><a href="#cb46-11" aria-hidden="true" tabindex="-1"></a> <span class="st">"SS<0 and goto & __; print $SS[$"</span> <span class="st">"#SS].</span><span class="sc">\"\\</span><span class="st">n</span><span class="sc">\"</span><span class="st">} "</span></span>
|
||
<span id="cb46-12"><a href="#cb46-12" aria-hidden="true" tabindex="-1"></a> <span class="st">"sub SS{ $#SS<0 and goto &__ ; print pop @SS}"</span></span>
|
||
<span id="cb46-13"><a href="#cb46-13" aria-hidden="true" tabindex="-1"></a> <span class="st">"sub _ { print </span><span class="sc">\"</span><span class="st">divide by zer"</span> <span class="st">"o</span><span class="sc">\\</span><span class="st">n</span><span class="sc">\"</span><span class="st">}sub ii{"</span></span>
|
||
<span id="cb46-14"><a href="#cb46-14" aria-hidden="true" tabindex="-1"></a> <span class="st">"map{ print</span><span class="sc">\"</span><span class="st">$_"</span> <span class="st">"</span><span class="sc">\\</span><span class="st">n</span><span class="sc">\"</span><span class="st"> } reverse @SS} sub AUTOLO"</span></span>
|
||
<span id="cb46-15"><a href="#cb46-15" aria-hidden="true" tabindex="-1"></a> <span class="st">"AD { print</span><span class="sc">\"</span><span class="st">un"</span> <span class="st">"implemented</span><span class="sc">\\</span><span class="st">n"</span> <span class="st">"</span><span class="sc">\"</span><span class="st">} sub gg{ $#"</span></span>
|
||
<span id="cb46-16"><a href="#cb46-16" aria-hidden="true" tabindex="-1"></a> <span class="st">"SS<0 and goto &__;push@SS,$SS[ $#SS]} sub uu{ "</span></span>
|
||
<span id="cb46-17"><a href="#cb46-17" aria-hidden="true" tabindex="-1"></a> <span class="st">"$#SS<1 and goto &__;$SS[ $#SS]+= $SS[$#SS-1];$SS"</span></span>
|
||
<span id="cb46-18"><a href="#cb46-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"[$#SS-1]=$SS[$"</span> <span class="st">"#SS]-$SS[$#SS-"</span> <span class="st">"1]; $SS[$#SS]-"</span></span>
|
||
<span id="cb46-19"><a href="#cb46-19" aria-hidden="true" tabindex="-1"></a> <span class="st">"=$SS[$#SS-1]}"</span><span class="op">);</span></span>
|
||
<span id="cb46-20"><a href="#cb46-20" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
|
||
<p>Compiling this you can generate:</p>
|
||
<div class="sourceCode" id="cb47"><pre class="sourceCode perl"><code class="sourceCode perl"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a><span class="kw">#!/usr/bin/env perl</span></span>
|
||
<span id="cb47-2"><a href="#cb47-2" aria-hidden="true" tabindex="-1"></a><span class="fu">use</span> <span class="kw">warnings</span>;_:<span class="wa">$_</span>= <> ; <span class="fu">defined</span> <span class="ot">or</span> <span class="fu">exit</span>; <span class="wa">@ARGV</span>=<span class="fu">split</span>; __:<span class="wa">$_</span>= <span class="fu">shift</span>;<span class="fu">defined</span> <span class="ot">or</span> <span class="fu">goto</span> _; <span class="fu">chomp</span> ;(<span class="ot">m*</span><span class="ch">^</span><span class="wa">\x70</span><span class="ot">oO</span><span class="wa">\x74$*</span><span class="ot">i</span><span class="ch">)?(</span><span class="ot">print "</span><span class="wa">$_</span><span class="ot"> w</span><span class="wa">\x61</span><span class="ot">s h</span><span class="wa">\145</span><span class="ot">r</span><span class="wa">\x65</span><span class="ot">!</span><span class="bn">\n</span><span class="ot">"</span><span class="ch">)</span><span class="ot">:</span><span class="ch">((</span><span class="ot">m</span><span class="ch">*^</span><span class="bn">\s</span><span class="ot">\*</span><span class="ch">(</span><span class="ot">-</span><span class="ch">?</span><span class="bn">\d</span><span class="ch">+(</span><span class="ot">\.</span><span class="bn">\d</span><span class="ch">+)?)</span><span class="bn">\s</span><span class="ot">\*</span><span class="wa">$*</span><span class="ch">)?(</span><span class="ot">push</span><span class="dt">@SS</span><span class="ot"> ,</span><span class="wa">$1</span><span class="ch">)</span><span class="ot">:</span><span class="ch">(</span><span class="ot">&{chr</span><span class="ch">(((</span><span class="ot">ord</span><span class="ch">)</span><span class="ot">%39</span><span class="ch">)+</span><span class="ot">3</span><span class="ch">**</span><span class="ot">4</span><span class="ch">)</span><span class="ot">x2 } </span><span class="ch">))</span><span class="ot">; goto __; sub ff { </span><span class="dt">@SS</span><span class="ot">= </span><span class="ch">()</span><span class="ot">} sub __{print "stack empty</span><span class="bn">\n</span><span class="ot">"} sub ss{</span><span class="dt">$#SS</span><span class="ot"><0 and goto & __; print </span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS</span><span class="ch">]</span><span class="ot">."</span><span class="bn">\n</span><span class="ot">"} sub SS{ </span><span class="dt">$#SS</span><span class="ot"><0 and goto &__ ; print pop </span><span class="dt">@SS</span><span class="ot">}sub _ { print "divide by zero</span><span class="bn">\n</span><span class="ot">"}sub ii{map{ print"</span><span class="wa">$_</span><span class="bn">\n</span><span class="ot">" } reverse </span><span class="dt">@SS</span><span class="ot">} sub AUTOLOAD { print"unimplemented</span><span class="bn">\n</span><span class="ot">"} sub gg{ </span><span class="dt">$#SS</span><span class="ot"><0 and goto &__;push</span><span class="dt">@SS</span><span class="ot">,</span><span class="dt">$SS</span><span class="ch">[</span><span class="bn"> $#SS</span><span class="ch">]</span><span class="ot">} sub uu{ </span><span class="dt">$#SS</span><span class="ot"><1 and goto &__;</span><span class="dt">$SS</span><span class="ch">[</span><span class="bn"> $#SS</span><span class="ch">]+</span><span class="ot">= </span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS-1</span><span class="ch">]</span><span class="ot">;</span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS-1</span><span class="ch">]</span><span class="ot">=</span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS</span><span class="ch">]</span><span class="ot">-</span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS-1</span><span class="ch">]</span><span class="ot">; </span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS</span><span class="ch">]</span><span class="ot">-=</span><span class="dt">$SS</span><span class="ch">[</span><span class="bn">$#SS-1</span><span class="ch">]</span><span class="ot">}</span></span></code></pre></div>
|
||
<p>Here is example input/output:</p>
|
||
<pre><code>p
|
||
stack empty
|
||
5 p
|
||
5
|
||
5 + 5 p
|
||
unimplemented
|
||
5
|
||
P
|
||
5
|
||
p
|
||
5</code></pre>
|
||
<p>So you can see that if one uses operators it just shows ‘unimplemented’ (observe
|
||
how this does not happen in the C program in linux!) but if one uses ‘p’ by
|
||
itself it will print what’s on the stack (for example).</p>
|
||
<p>To not get ‘unimplemented’ you can remove from the perl:</p>
|
||
<div class="sourceCode" id="cb49"><pre class="sourceCode perl"><code class="sourceCode perl"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a><span class="kw">sub </span><span class="fu">AUTOLOAD</span> { print<span class="ot">"</span><span class="st">unimplemented</span><span class="ch">\n</span><span class="ot">"</span>}</span></code></pre></div>
|
||
<p>(Note that the author stated this was used for exception handling so another
|
||
possibility is that the C code doesn’t generate the correct perl and indeed even
|
||
spaces is known to break the perl in at least one way, syntax errors, but maybe
|
||
others too.)</p>
|
||
<p>Here is an example run of several operations in the perl script after removing
|
||
that subroutine:</p>
|
||
<div class="sourceCode" id="cb50"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 5 p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-2"><a href="#cb50-2" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span>
|
||
<span id="cb50-3"><a href="#cb50-3" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 5 + p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-4"><a href="#cb50-4" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span>
|
||
<span id="cb50-5"><a href="#cb50-5" aria-hidden="true" tabindex="-1"></a><span class="ex">Undefined</span> subroutine <span class="kw">&</span><span class="ex">main::UU</span> called at ./pl.pl line 2, <span class="op"><></span> line 1.</span>
|
||
<span id="cb50-6"><a href="#cb50-6" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 5 <span class="pp">*</span> p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-7"><a href="#cb50-7" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span>
|
||
<span id="cb50-8"><a href="#cb50-8" aria-hidden="true" tabindex="-1"></a><span class="ex">Undefined</span> subroutine <span class="kw">&</span><span class="ex">main::ww</span> called at ./pl.pl line 2, <span class="op"><></span> line 1.</span>
|
||
<span id="cb50-9"><a href="#cb50-9" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 5 <span class="at">-</span> p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-10"><a href="#cb50-10" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span>
|
||
<span id="cb50-11"><a href="#cb50-11" aria-hidden="true" tabindex="-1"></a><span class="ex">Undefined</span> subroutine <span class="kw">&</span><span class="ex">main::WW</span> called at ./pl.pl line 2, <span class="op"><></span> line 1.</span>
|
||
<span id="cb50-12"><a href="#cb50-12" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 5 / p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-13"><a href="#cb50-13" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span>
|
||
<span id="cb50-14"><a href="#cb50-14" aria-hidden="true" tabindex="-1"></a><span class="ex">Undefined</span> subroutine <span class="kw">&</span><span class="ex">main::YY</span> called at ./pl.pl line 2, <span class="op"><></span> line 1.</span>
|
||
<span id="cb50-15"><a href="#cb50-15" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 P <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-16"><a href="#cb50-16" aria-hidden="true" tabindex="-1"></a><span class="ex">5$</span> echo p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-17"><a href="#cb50-17" aria-hidden="true" tabindex="-1"></a><span class="ex">stack</span> empty</span>
|
||
<span id="cb50-18"><a href="#cb50-18" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo P <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb50-19"><a href="#cb50-19" aria-hidden="true" tabindex="-1"></a><span class="ex">stack</span> empty</span></code></pre></div>
|
||
<p>Note the undefined subroutine error: that happens with commands that are not
|
||
even in the program. Again the author used <code>AUTOLOAD</code> for exception handling so
|
||
it seems likely that there is something missing (which the below shows as well).
|
||
For instance inputting <code>D</code> followed by <code>XX</code>:</p>
|
||
<pre><code>Undefined subroutine &main::nn called at ./pl.pl line 2, <> line 6.
|
||
Undefined subroutine &main::[[ called at ./pl.pl line 2, <> line 1.</code></pre>
|
||
<p>That means then that in linux despite the subroutines seemingly not existing it
|
||
works in the code, at least in some cases.</p>
|
||
<p>As far as the unimplemented error goes: the author stated that it means there is
|
||
invalid input. But as can be seen by the input I (Cody) gave the input is not
|
||
actually incorrect. It is also curious to note that it ends up printing what’s
|
||
on the stack at that point:</p>
|
||
<div class="sourceCode" id="cb52"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb52-1"><a href="#cb52-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo 5 5 + p <span class="kw">|</span> <span class="ex">./dlowe.pl</span></span>
|
||
<span id="cb52-2"><a href="#cb52-2" aria-hidden="true" tabindex="-1"></a><span class="ex">unimplemented</span></span>
|
||
<span id="cb52-3"><a href="#cb52-3" aria-hidden="true" tabindex="-1"></a><span class="ex">5</span></span></code></pre></div>
|
||
<p>which might (?) suggest that the <code>+</code> operator is unimplemented. Unfortunately it
|
||
has been many years since I have used perl and I was never a guru either.</p>
|
||
<h3 id="status-inabiaf---please-do-not-fix-25">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<p>The author states that in perl < 5.6.0 there is a bug with a core dump in what
|
||
they said is in <code>Perl_sv_upgrade</code>. As this is documented it is not considered a
|
||
bug to be fixed. For the curious this will crash in macOS. Cody notes that the
|
||
code that crashes is:</p>
|
||
<div class="sourceCode" id="cb53"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a>perl_eval_sv</span>
|
||
<span id="cb53-2"><a href="#cb53-2" aria-hidden="true" tabindex="-1"></a><span class="op">(</span>newSVpv<span class="op">(</span><span class="st">"_:$_= <> ; defined or exit; @ARGV"</span></span>
|
||
<span id="cb53-3"><a href="#cb53-3" aria-hidden="true" tabindex="-1"></a><span class="st">"=split; __:$_= shift;defined or goto _; chomp "</span></span>
|
||
<span id="cb53-4"><a href="#cb53-4" aria-hidden="true" tabindex="-1"></a><span class="st">";(m*^</span><span class="sc">\\</span><span class="st">x70oO"</span> <span class="st">"</span><span class="sc">\\</span><span class="st">x74$*i)?(pri"</span> <span class="st">"nt </span><span class="sc">\"</span><span class="st">$_ w</span><span class="sc">\\</span><span class="st">x"</span></span>
|
||
<span id="cb53-5"><a href="#cb53-5" aria-hidden="true" tabindex="-1"></a><span class="st">"61s h</span><span class="sc">\\</span><span class="st">145r</span><span class="sc">\\</span><span class="st">x"</span> <span class="st">"65!</span><span class="sc">\\</span><span class="st">n</span><span class="sc">\"</span><span class="st">):((m*"</span> <span class="st">"^</span><span class="sc">\\</span><span class="st">s</span><span class="sc">\\</span><span class="st">*(-?</span><span class="sc">\\</span><span class="st">d+"</span></span>
|
||
<span id="cb53-6"><a href="#cb53-6" aria-hidden="true" tabindex="-1"></a><span class="st">"(</span><span class="sc">\\</span><span class="st">.</span><span class="sc">\\</span><span class="st">d+)?)</span><span class="sc">\\</span><span class="st">s"</span> <span class="st">"</span><span class="sc">\\</span><span class="st">*$*)?(push@SS ,$1):(&{chr(((o"</span></span>
|
||
<span id="cb53-7"><a href="#cb53-7" aria-hidden="true" tabindex="-1"></a><span class="st">"rd)%39)+3**4)x2 } )); goto __; sub ff { @SS= ("</span></span>
|
||
<span id="cb53-8"><a href="#cb53-8" aria-hidden="true" tabindex="-1"></a><span class="st">")} sub __{print </span><span class="sc">\"</span><span class="st">stack empty</span><span class="sc">\\</span><span class="st">"</span> <span class="st">"n</span><span class="sc">\"</span><span class="st">} sub ss{$#"</span></span>
|
||
<span id="cb53-9"><a href="#cb53-9" aria-hidden="true" tabindex="-1"></a><span class="st">"SS<0 and goto & __; print $SS[$"</span> <span class="st">"#SS].</span><span class="sc">\"\\</span><span class="st">n</span><span class="sc">\"</span><span class="st">} "</span></span>
|
||
<span id="cb53-10"><a href="#cb53-10" aria-hidden="true" tabindex="-1"></a><span class="st">"sub SS{ $#SS<0 and goto &__ ; print pop @SS}"</span></span>
|
||
<span id="cb53-11"><a href="#cb53-11" aria-hidden="true" tabindex="-1"></a><span class="st">"sub _ { print </span><span class="sc">\"</span><span class="st">divide by zer"</span> <span class="st">"o</span><span class="sc">\\</span><span class="st">n</span><span class="sc">\"</span><span class="st">}sub ii{"</span></span>
|
||
<span id="cb53-12"><a href="#cb53-12" aria-hidden="true" tabindex="-1"></a><span class="st">"map{ print</span><span class="sc">\"</span><span class="st">$_"</span> <span class="st">"</span><span class="sc">\\</span><span class="st">n</span><span class="sc">\"</span><span class="st"> } reverse @SS} sub AUTOLO"</span></span>
|
||
<span id="cb53-13"><a href="#cb53-13" aria-hidden="true" tabindex="-1"></a><span class="st">"AD { print</span><span class="sc">\"</span><span class="st">un"</span> <span class="st">"implemented</span><span class="sc">\\</span><span class="st">n"</span> <span class="st">"</span><span class="sc">\"</span><span class="st">} sub gg{ $#"</span></span>
|
||
<span id="cb53-14"><a href="#cb53-14" aria-hidden="true" tabindex="-1"></a><span class="st">"SS<0 and goto &__;push@SS,$SS[ $#SS]} sub uu{ "</span></span>
|
||
<span id="cb53-15"><a href="#cb53-15" aria-hidden="true" tabindex="-1"></a><span class="st">"$#SS<1 and goto &__;$SS[ $#SS]+= $SS[$#SS-1];$SS"</span></span>
|
||
<span id="cb53-16"><a href="#cb53-16" aria-hidden="true" tabindex="-1"></a><span class="st">"[$#SS-1]=$SS[$"</span> <span class="st">"#SS]-$SS[$#SS-"</span> <span class="st">"1]; $SS[$#SS]-"</span></span>
|
||
<span id="cb53-17"><a href="#cb53-17" aria-hidden="true" tabindex="-1"></a><span class="st">"=$SS[$#SS-1]} "</span><span class="op">,</span><span class="dv">0</span><span class="op">),</span><span class="dv">0</span> <span class="op">);</span></span></code></pre></div>
|
||
<p>and in particular it appears that it is the perl itself. In other words if one
|
||
changes it to be:</p>
|
||
<div class="sourceCode" id="cb54"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a>perl_eval_sv<span class="op">(</span>newSVpv<span class="op">(</span><span class="st">""</span><span class="op">,</span><span class="dv">0</span><span class="op">),</span><span class="dv">0</span><span class="op">);</span></span></code></pre></div>
|
||
<p>it will not crash. But of course it won’t do anything either. So it’s more
|
||
specifically that the call to <code>newSVpv()</code> crashes the code but <em>INSIDE</em>
|
||
(key point!) the call to <code>perl_eval_sv()</code> that does it. Given what the author
|
||
stated and that the version of perl is < than 5.6.0 which the author states can
|
||
crash this makes sense.</p>
|
||
<p>The example command above <em>should</em> print:</p>
|
||
<div class="sourceCode" id="cb55"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> echo <span class="st">"13 14 15 16 17 + - * / p"</span> <span class="kw">|</span> <span class="ex">./dlowe</span></span>
|
||
<span id="cb55-2"><a href="#cb55-2" aria-hidden="true" tabindex="-1"></a><span class="ex">-0.0515873015873016</span></span></code></pre></div>
|
||
<p>and that’s what it shows in linux.</p>
|
||
<p>Note that with different perl libraries in macOS (for instance from
|
||
<a href="https://brew.sh">Homebrew</a> and <a href="https://www.macports.org">MacPorts</a> it will
|
||
likely print different warnings when compiling. It was observed that with
|
||
Homebrew it does not report any warnings but with MacPorts it results in a total
|
||
of 92 warnings! Nonetheless neither works okay and both crash.</p>
|
||
<h2 id="primenum"><a name="2000_primenum"></a>2000/primenum</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-26">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2000primenumprimenum.c">Source code: <a href="2000/primenum/primenum.c">2000/primenum/primenum.c</a></h3>
|
||
<h3 id="information-2000primenumindex.html">Information: <a href="2000/primenum/index.html">2000/primenum/index.html</a></h3>
|
||
<p>This program does not do what you might think it does! Running it like:</p>
|
||
<div class="sourceCode" id="cb56"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./primenum</span> 13</span></code></pre></div>
|
||
<p>will seemingly wait for input exactly because it is waiting for input. See the
|
||
index.html file or look at the source.</p>
|
||
<p>Although the name of the program suggests it prints prime numbers this is not
|
||
the case. This is by design. See the author’s comments for more details or
|
||
better yet look at the code and if necessary try it out. Please do not try and
|
||
fix this.</p>
|
||
<p>A crash in the program is known as well. This is also a feature. Please do not
|
||
try to fix the crashing of this code except to challenge yourself (if you think
|
||
that it’ll be worth your two second fix :-) ). If you do fix it please do not
|
||
make a pull request.</p>
|
||
<h2 id="rince-1"><a name="2000_rince"></a>2000/rince</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-27">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2000rincerince.c">Source code: <a href="2000/rince/rince.c">2000/rince/rince.c</a></h3>
|
||
<h3 id="information-2000rinceindex.html">Information: <a href="2000/rince/index.html">2000/rince/index.html</a></h3>
|
||
<p>If <code>DISPLAY</code> is not set the program will very likely crash, do something strange
|
||
(or if you’re very unlucky your computer might <a href="https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)">halt and catch
|
||
fire</a>! :-) ).</p>
|
||
<h1 id="section-17"><a name="2001"></a>2001</h1>
|
||
<h2 id="anonymous"><a name="2001_anonymous"></a>2001/anonymous</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-28">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2001anonymousanonymous.c">Source code: <a href="2001/anonymous/anonymous.c">2001/anonymous/anonymous.c</a></h3>
|
||
<h3 id="information-2001anonymousindex.html">Information: <a href="2001/anonymous/index.html">2001/anonymous/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed this so that it
|
||
doesn’t segfault and then also fixed the functionality of it (but see below).</p>
|
||
<p>Cody also fixed the <a href="2001/anonymous/anonymous.ten.c">anonymous.ten.c</a> program
|
||
(it also segfaulted) but notes that it <strong>MUST</strong> be compiled as a <strong>32-bit ELF
|
||
binary</strong> so it will NOT work in macOS (for example); if you cannot use <code>-m32</code> or
|
||
even if you can but it cannot compile as an ELF binary (not elf binary :-) )
|
||
(but see below) then the <code>anonymous</code> program itself will very likely crash if
|
||
you run it on the compiled <a href="2001/anonymous/anonymous.ten.c">anonymous.ten.c</a> but
|
||
if nothing else it will not modify the target executable (this part of the fix
|
||
at least should be correct).</p>
|
||
<p>The file <code>2001/anonymous/anonymous.ten.32</code> is a pre-compiled
|
||
<a href="2001/anonymous.ten.c">2001/anonymous.ten.c</a> as a 32-bit ELF binary in case you
|
||
can run ELF binaries but cannot compile 32-bit binaries.</p>
|
||
<p>Other BSD Unices were not tested.</p>
|
||
<p>Note also that if you don’t specify a file or you specify a non-32-bit ELF file
|
||
this program will very likely crash or do something strange like slaughter the
|
||
elves of Imladris :-(</p>
|
||
<h2 id="bellard"><a name="2001_bellard"></a>2001/bellard</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-29">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="status-doesnt-work-with-some-platforms---please-help-us-fix-1">STATUS: doesn’t work with some platforms - please help us fix</h3>
|
||
<h3 id="source-code-2001bellardbellard.c">Source code: <a href="2001/bellard/bellard.c">2001/bellard/bellard.c</a></h3>
|
||
<h3 id="information-2001bellardindex.html">Information: <a href="2001/bellard/index.html">2001/bellard/index.html</a></h3>
|
||
<p>The two statuses might seem contradictory but that is a complicated question.
|
||
The author stated that it only works with i386 linux so on the one hand the fact
|
||
it doesn’t work in modern systems is considered a feature and not a bug. But on
|
||
the other hand it would be nice if there was an alternate version which worked
|
||
for modern systems. This does seem quite unlikely but some fixes, described
|
||
next, were made.</p>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed an initial
|
||
segfault (trying to open the file) and he also fixed the <a href="2001/bellard/bellard.otccex.c">supplementary program
|
||
bellard.otccex.c</a> but this still crashes in
|
||
systems not i386 linux which is what the author stated.</p>
|
||
<p>On the other hand if you do have a fix for 64-bit systems you’re welcome to
|
||
provide it as an alternate version. If by chance you have a fix so that it works
|
||
for both 32-bit and 64-bit systems that is also okay.</p>
|
||
<p>The author said that they compiled it with <a href="https://ftp.gnu.org/gnu/gcc/gcc-2.95.2/gcc-everything-2.95.2.tar.gz">gcc version
|
||
2.95.2</a>. We
|
||
don’t know if a certain gcc version is necessary but it might be helpful to
|
||
download and compile that version to test it - or it might not.</p>
|
||
<p>I (Cody) have no i386 system to test this but perhaps this is why I can’t get it
|
||
to work. Yusuke was able to get this to work with <code>-m32</code> but only in an
|
||
emulator.</p>
|
||
<p>On the author’s <a href="https://bellard.org/otcc/">web page for this program</a> it is
|
||
explicitly stated that it requires i386 linux.</p>
|
||
<p>There I found what should be a more portable version which is included as
|
||
<a href="2001/bellard/otccelf.c">otccelf.c</a> (after adding some <code>#include</code>s and the
|
||
modification by Yusuke noted in the <a href="thanks-for-help.html">thanks</a>
|
||
file) but it appears this <em>also</em> requires i386 linux; indeed looking at the code
|
||
it hard codes paths that are i386 specific to linux.</p>
|
||
<p>Another point of interest is that the author provided de-obfuscated versions
|
||
which might be of value to look at. I might do that as well but this entry is
|
||
very likely never going to work for 64-bit linux so that’s not that likely since
|
||
there are other things that are more important.</p>
|
||
<p>If you have a fix for 64-bit systems this is welcome as an alternate version, as
|
||
stated above. You might like to look at the otccelf version but note that it (at
|
||
least in 64-bit linux and macOS) has compilation errors.</p>
|
||
<h3 id="aside-why-were-there-changes-made-if-inabiaf">Aside: why were there changes made if INABIAF ?</h3>
|
||
<p>This is a good question. The reason is we believe it better to fix some obvious
|
||
problems: there were some bugs that would very possibly prevent it from working
|
||
even if it was in i386 linux though Yusuke seemed to get it to work in an
|
||
emulator so perhaps not. Still it’s better to have the type of the file pointer
|
||
correct and so that the file can at least be opened in modern systems even if
|
||
the compiler won’t work there.</p>
|
||
<p>Also the supplementary program, which did not work at all, was fixed (by Cody)
|
||
and it can be run by itself for fun in modern systems, which was not possible
|
||
before the fixes there.</p>
|
||
<h2 id="dgbeards"><a name="2001_dgbeards"></a>2001/dgbeards</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-30">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2001dgbeardsdgbeards.c">Source code: <a href="2001/dgbeards/dgbeards.c">2001/dgbeards/dgbeards.c</a></h3>
|
||
<h3 id="information-2001dgbeardsindex.html">Information: <a href="2001/dgbeards/index.html">2001/dgbeards/index.html</a></h3>
|
||
<p>This program deliberately crashes if it loses (which is what it aims to do).</p>
|
||
<h2 id="herrmann1"><a name="2001_herrmann1"></a>2001/herrmann1</h2>
|
||
<h3 id="status-missing-files---please-provide-them-1">STATUS: missing files - please provide them</h3>
|
||
<h3 id="source-code-2001herrmann1herrmann1.c">Source code: <a href="2001/herrmann1/herrmann1.c">2001/herrmann1/herrmann1.c</a></h3>
|
||
<h3 id="information-2001herrmann1index.html">Information: <a href="2001/herrmann1/index.html">2001/herrmann1/index.html</a></h3>
|
||
<p>The author referred to the file <code>herrmann1.turing</code> but it does not exist not even
|
||
in the archive. Do you have a copy? Please provide it!</p>
|
||
<h3 id="status-known-bug---please-help-us-fix-12">STATUS: known bug - please help us fix</h3>
|
||
<p>There is also a bug in part. During compilation you’re supposed to see some
|
||
animation but this does not seem to work with modern gcc versions. It appears
|
||
that version 2.95 works but maybe others do as well. Do you have a fix? We would
|
||
appreciate your help!</p>
|
||
<p>If you want to try and fix this (mis)feature, you are welcome to try.</p>
|
||
<h2 id="kev"><a name="2001_kev"></a>2001/kev</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-31">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2001kevkev.c">Source code: <a href="2001/kev/kev.c">2001/kev/kev.c</a></h3>
|
||
<h3 id="information-2001kevindex.html">Information: <a href="2001/kev/index.html">2001/kev/index.html</a></h3>
|
||
<p>Sometimes when one player presses <code>q</code> it will result in broken pipe on the other
|
||
end.</p>
|
||
<p>The author also noted that some versions of <code>curses</code> have problems with
|
||
<code>getch()</code> having a delay.</p>
|
||
<p>The program is very likely to segfault if the specified port can’t be bound or
|
||
connected to.</p>
|
||
<p>If the terminal is too wide (the author suggests over 500 characters) the
|
||
program can segfault.</p>
|
||
<p>It’s also possible to crash the program if a player scores over a billion
|
||
points.</p>
|
||
<p>Although it is independent of endianness both systems need the same character
|
||
set. In other words both have to be ASCII or EBCDIC - not one of each.</p>
|
||
<h2 id="rosten"><a name="2001_rosten"></a>2001/rosten</h2>
|
||
<h3 id="status-missing-files---please-provide-them-2">STATUS: missing files - please provide them</h3>
|
||
<h3 id="source-code-2001rostenrosten.c">Source code: <a href="2001/rosten/rosten.c">2001/rosten/rosten.c</a></h3>
|
||
<h3 id="information-2001rostenindex.html">Information: <a href="2001/rosten/index.html">2001/rosten/index.html</a></h3>
|
||
<p>The author stated that there is a cat man page for this program in case one
|
||
wanted to install it as a tool but this is missing.</p>
|
||
<h2 id="schweikh"><a name="2001_schweikh"></a>2001/schweikh</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-32">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2001schweikhschweikh.c">Source code: <a href="2001/schweikh/schweikh.c">2001/schweikh/schweikh.c</a></h3>
|
||
<h3 id="information-2001schweikhindex.html">Information: <a href="2001/schweikh/index.html">2001/schweikh/index.html</a></h3>
|
||
<p>The glob pattern must match the whole string. See the author’s comments for
|
||
details and a workaround.</p>
|
||
<p>There’s also no way to escape meta characters.</p>
|
||
<h2 id="westley-3"><a name="2001_westley"></a>2001/westley</h2>
|
||
<h3 id="status-uses-gets---change-to-fgets-if-possible-4">STATUS: uses gets() - change to fgets() if possible</h3>
|
||
<h3 id="source-code-2001westleywestley.c">Source code: <a href="2001/westley/westley.c">2001/westley/westley.c</a></h3>
|
||
<h3 id="information-2001westleyindex.html">Information: <a href="2001/westley/index.html">2001/westley/index.html</a></h3>
|
||
<p>This function uses <code>gets(3)</code> but it would be ideal if it used <code>fgets(3)</code>. This
|
||
one is rather complicated and will be looked at later (some progress was made by
|
||
Cody but it is less important than other work) but you are welcome to try
|
||
and fix this if you wish.</p>
|
||
<h3 id="status-main-has-only-one-arg---try-and-make-it-have-2-or-3-1">STATUS: main() has only one arg - try and make it have 2 or 3</h3>
|
||
<p>This program only has one arg to <code>main()</code>. However changing it to have 2 is not
|
||
as simple as it might seem. Doing this breaks things. If memory serves changing
|
||
it to two will, for instance, break the punch card code output. It might be that
|
||
that is for <code>fgets(3)</code>, however, but the point remains: in order to test any
|
||
fixes you must determine if the extra files generated (some from <code>sort(1)</code>) -
|
||
see the index.html file - generate correct output as well as that the main entry
|
||
does too. You might try running the <code>try.sh</code> script and redirect it to a file
|
||
first so that you can compare the output. Make sure to recreate the extra files
|
||
as described by the author if you do fix this. This might be looked at later if
|
||
nobody else takes up the challenge.</p>
|
||
<h3 id="status-missing-files---please-provide-them-3">STATUS: missing files - please provide them</h3>
|
||
<p>The author referred to a file <code>card.gif</code> but this file is missing. Do you have
|
||
it? Please provide it!</p>
|
||
<h2 id="williams"><a name="2001_williams"></a>2001/williams</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-13">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-2001williamswilliams.c">Source code: <a href="2001/williams/williams.c">2001/williams/williams.c</a></h3>
|
||
<h3 id="information-2001williamsindex.html">Information: <a href="2001/williams/index.html">2001/williams/index.html</a></h3>
|
||
<p>There seem to be a couple bugs at least in this entry. The first one is that
|
||
when it does reach a certain point it crashes. This is in the function <code>J()</code> (or
|
||
one it calls?). But sometimes it seems to not get that far, just showing lines
|
||
moving back and forth. This is also in <code>J()</code>. It is not confirmed but it might
|
||
be that the lines are drawn by <code>XDrawString()</code>, the last part in <code>J()</code>.</p>
|
||
<p><code>J()</code> has a <code>for</code> loop identified by <code>for</code> and also a couple <code>while</code> loops,
|
||
identified by <code>R</code>.</p>
|
||
<p>Since the game never ends properly the score is not printed either.</p>
|
||
<p>It appears that the crash happens in more than one place. For instance it has
|
||
happened at</p>
|
||
<div class="sourceCode" id="cb57"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb57-1"><a href="#cb57-1" aria-hidden="true" tabindex="-1"></a>XCheckMaskEvent<span class="op">(</span>d<span class="op">,</span> <span class="dv">4</span><span class="op">,&</span>e<span class="op">)</span></span></code></pre></div>
|
||
<p>but it’s also happened at</p>
|
||
<div class="sourceCode" id="cb58"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a><span class="cf">else</span> XDrawPoint<span class="op">(</span>d <span class="op">,</span>w<span class="op">,</span>g<span class="op">,(</span>l<span class="op">.</span>s<span class="op">+=</span>l<span class="op">.</span>a<span class="op">)>></span><span class="dv">9</span><span class="op">,</span> h<span class="op">=(</span>l<span class="op">.</span>c<span class="op">+=</span>l<span class="op">.</span>b<span class="op">)>></span><span class="dv">9</span><span class="op">)</span></span></code></pre></div>
|
||
<p>In both cases the pointer <code>d</code> was corrupted:</p>
|
||
<pre><code>(lldb) p d
|
||
(Display *) 0x0000000000000001</code></pre>
|
||
<p>It is believed that it also happened at</p>
|
||
<div class="sourceCode" id="cb60"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a>XDrawString<span class="op">(</span>d<span class="op">,</span>w<span class="op">,</span>g<span class="op">,</span>W<span class="op">/</span><span class="dv">3</span><span class="op">,</span>H<span class="op">/</span><span class="dv">2</span><span class="op">,</span>m<span class="op">,</span>B<span class="op">);</span></span></code></pre></div>
|
||
<p>in <code>J()</code> and for the same reason.</p>
|
||
<p>The loop seems to be stuck in the call to <code>usleep(3)</code> like:</p>
|
||
<div class="sourceCode" id="cb61"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a>usleep<span class="op">(</span>p<span class="op">*</span><span class="dv">200</span><span class="op">);</span></span></code></pre></div>
|
||
<p>which happens to be in a <code>while()</code> loop.</p>
|
||
<p>There is a way to get the code to crash. If you don’t do anything until
|
||
everything is destroyed (where you’d lose the game if it ended) and then you
|
||
start to shoot your missiles repeatedly it will eventually crash. It appears not
|
||
to be the case (though this was not tried as many times) if you start shooting
|
||
when the missiles come down. The fact you can shoot after it starts that
|
||
sleeping in a loop does suggest that it’s not stuck only showing those lines and
|
||
sleeping.</p>
|
||
<h1 id="section-18"><a name="2002"></a>2002</h1>
|
||
<p>There was no IOCCC in 2002.</p>
|
||
<h1 id="section-19"><a name="2003"></a>2003</h1>
|
||
<p>There was no IOCCC in 2003.</p>
|
||
<h1 id="section-20"><a name="2004"></a>2004</h1>
|
||
<h2 id="gavin"><a name="2004_gavin"></a>2004/gavin</h2>
|
||
<h3 id="status-compiled-executable-crashes---please-help-us-fix-1">STATUS: compiled executable crashes - please help us fix</h3>
|
||
<h3 id="status-doesnt-work-with-some-platforms---please-help-us-fix-2">STATUS: doesn’t work with some platforms - please help us fix</h3>
|
||
<h3 id="source-code-2004gavingavin.c">Source code: <a href="2004/gavin/gavin.c">2004/gavin/gavin.c</a></h3>
|
||
<h3 id="information-2004gavinindex.html">Information: <a href="2004/gavin//index.html">2004/gavin//index.html</a></h3>
|
||
<p>Segmentation fault will occur in some systems. For instance on macOS with the
|
||
arm64 chip:</p>
|
||
<div class="sourceCode" id="cb62"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./gavin</span> <span class="op">></span> kernel</span></code></pre></div>
|
||
<p>When trying to link <code>gavin.o</code> to produce <code>sh</code>, the linker generates:</p>
|
||
<pre><code>Undefined symbols for architecture arm64:
|
||
"start", referenced from:
|
||
-u command line option
|
||
(maybe you meant: __start)
|
||
ld: symbol(s) not found for architecture arm64</code></pre>
|
||
<p>We believe that this simply won’t work with non x86 specific systems but perhaps
|
||
you have a fix? We welcome your help!</p>
|
||
<h3 id="recent-2004gavin-mods">Recent 2004/gavin mods:</h3>
|
||
<p>Although not related some recent changes were made to 2004/gavin to let it
|
||
compile under clang. The following patch was applied:</p>
|
||
<div class="sourceCode" id="cb64"><pre class="sourceCode patch"><code class="sourceCode diff"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a><span class="kw">diff --git a/2004/gavin/gavin.c b/2004/gavin/gavin.c</span></span>
|
||
<span id="cb64-2"><a href="#cb64-2" aria-hidden="true" tabindex="-1"></a>index c967b7e..2082b49 100644</span>
|
||
<span id="cb64-3"><a href="#cb64-3" aria-hidden="true" tabindex="-1"></a><span class="dt">--- a/2004/gavin/gavin.c</span></span>
|
||
<span id="cb64-4"><a href="#cb64-4" aria-hidden="true" tabindex="-1"></a><span class="dt">+++ b/2004/gavin/gavin.c</span></span>
|
||
<span id="cb64-5"><a href="#cb64-5" aria-hidden="true" tabindex="-1"></a><span class="dt">@@ -1,8 +1,9 @@</span></span>
|
||
<span id="cb64-6"><a href="#cb64-6" aria-hidden="true" tabindex="-1"></a><span class="va">+int main(int t, char **q, char **d) { return cain(t, (int)q, (int)d); }</span></span>
|
||
<span id="cb64-7"><a href="#cb64-7" aria-hidden="true" tabindex="-1"></a> #define G(n) int n(int t, int q, int d)</span>
|
||
<span id="cb64-8"><a href="#cb64-8" aria-hidden="true" tabindex="-1"></a> #define X(p,t,s) (p>=t&&p<(t+s)&&(p-(t)&1023)<(s&1023))</span>
|
||
<span id="cb64-9"><a href="#cb64-9" aria-hidden="true" tabindex="-1"></a> #define U(m) *((signed char *)(m))</span>
|
||
<span id="cb64-10"><a href="#cb64-10" aria-hidden="true" tabindex="-1"></a> #define F if(!--q){</span>
|
||
<span id="cb64-11"><a href="#cb64-11" aria-hidden="true" tabindex="-1"></a><span class="st">-#define I(s) (int)main-(int)s</span></span>
|
||
<span id="cb64-12"><a href="#cb64-12" aria-hidden="true" tabindex="-1"></a><span class="va">+#define I(s) (int)cain-(int)s</span></span>
|
||
<span id="cb64-13"><a href="#cb64-13" aria-hidden="true" tabindex="-1"></a> #define P(s,c,k) for(h=0; h>>14==0; h+=129)Y(16*c+h/1024+Y(V+36))&128>>(h&7)?U(s+(h&15367))=k:k</span>
|
||
<span id="cb64-14"><a href="#cb64-14" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb64-15"><a href="#cb64-15" aria-hidden="true" tabindex="-1"></a> G (B)</span>
|
||
<span id="cb64-16"><a href="#cb64-16" aria-hidden="true" tabindex="-1"></a><span class="dt">@@ -52,7 +53,7 @@ else</span></span>
|
||
<span id="cb64-17"><a href="#cb64-17" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb64-18"><a href="#cb64-18" aria-hidden="true" tabindex="-1"></a> G (_);</span>
|
||
<span id="cb64-19"><a href="#cb64-19" aria-hidden="true" tabindex="-1"></a> G (o);</span>
|
||
<span id="cb64-20"><a href="#cb64-20" aria-hidden="true" tabindex="-1"></a><span class="st">-G (main)</span></span>
|
||
<span id="cb64-21"><a href="#cb64-21" aria-hidden="true" tabindex="-1"></a><span class="va">+G (cain)</span></span>
|
||
<span id="cb64-22"><a href="#cb64-22" aria-hidden="true" tabindex="-1"></a> {</span>
|
||
<span id="cb64-23"><a href="#cb64-23" aria-hidden="true" tabindex="-1"></a> Z, k = K;</span>
|
||
<span id="cb64-24"><a href="#cb64-24" aria-hidden="true" tabindex="-1"></a> if (!t)</span></code></pre></div>
|
||
<p>The original Makefile from 2004 had the following to say about this entry:</p>
|
||
<pre class="make"><code># Special flags for the gavin entry
|
||
#
|
||
# FYI: Older versions of GCC have a bug in -O2 optimization, hence -O1
|
||
#
|
||
GAVIN_OPT= -O1
|
||
GAVIN_FLAGS=\
|
||
'-DY(m)=*((int*)(m))'\
|
||
'-DE(f,a,b,c)=((G((*)))(f))(a,b,c)'\
|
||
'-DM=for(D=0;D<786432;D++)'\
|
||
'-DZ=int i=0,j=0,h,n,p=393728,s=26739,C,D'\
|
||
'-DV=0x90200'\
|
||
'-DK=0'\
|
||
'-DR=while((C=E(V-8,100,0,0))&3&&(D=E(V-8,96,0,0))|3){'\
|
||
'-DL(c,d)=E(V+8,100,c,0);R}E(V+8,96,d,0);R}'
|
||
|
||
# ...
|
||
|
||
# Best of Show
|
||
#
|
||
gavin: gavin.c
|
||
${CC} ${GAVIN_OPT} -o gavin ${GAVIN_FLAGS} gavin.c
|
||
${RM} -f kernel
|
||
./gavin > kernel
|
||
${CC} ${GAVIN_OPT} -c ${GAVIN_FLAGS} -DB=_start '-Dputchar(a)=' gavin.c
|
||
${RM} -f sh
|
||
${LD} -s -o sh gavin.o
|
||
${RM} -f vi
|
||
${CP} sh vi
|
||
${RM} -f fs.tar
|
||
${TAR} -cvf fs.tar sh vi gavin.c index.html prim
|
||
|
||
gavin_clean:
|
||
${RM} -f sh vi kernel gavin.o
|
||
|
||
gavin_clobber: gavin_clean
|
||
${RM} -f gavin fs.tar
|
||
|
||
gavin_files: boot.b lilo.conf prim gavin_install.txt</code></pre>
|
||
<p>The current (<a href="2004/gavin/Makefile">Makefile</a> was modified to try and
|
||
fit into the current IOCCC build environment.</p>
|
||
<h3 id="status-inabiaf---please-do-not-fix-33">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<p>See <a href="2004/gavin/index.html#known-features">known features in the index.html</a> for
|
||
things that are not bugs but documented (mis)features.</p>
|
||
<h2 id="jdalbec"><a name="2004_jdalbec"></a>2004/jdalbec</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-34">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2004jdalbecjdalbec.c">Source code: <a href="2004/jdalbec/jdalbec.c">2004/jdalbec/jdalbec.c</a></h3>
|
||
<h3 id="information-2004jdalbecindex.html">Information: <a href="2004/jdalbec/index.html">2004/jdalbec/index.html</a></h3>
|
||
<p>The author stated that:</p>
|
||
<pre><code>Arguments matching `/[^2]22$/` cause the program to segfault
|
||
after rapidly exhausting the available stack space. I could
|
||
probably fix this by adding some special cases to the code,
|
||
but [Blaine the Mono] it's quite a bit more exciting this way,
|
||
don't you think?[/Blaine] Since the trailing `22` will be
|
||
its own atom anyway, you can just insert a space in front of
|
||
it if you run into this feature (e.g. `1 22` instead of `122`).
|
||
|
||
Arguments matching `/(?:.){10,}/` will produce visually incorrect
|
||
results (e.g., generation 1 starting from 1111111111 will
|
||
print as `: 1`), but there's nothing interesting about these
|
||
arguments that can't be modeled using shorter runs of the same
|
||
symbol.
|
||
|
||
Arguments matching `/(?:.){257,}/` may produce mathematically
|
||
incorrect results (e.g., generation 1 starting from a string
|
||
of 257 `1`s will be calculated as `11`); the remark from the
|
||
previous paragraph applies here also.</code></pre>
|
||
<h2 id="sds"><a name="2004_sds"></a>2004/sds</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-35">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2004sdssds.c">Source code: <a href="2004/sds/sds.c">2004/sds/sds.c</a></h3>
|
||
<h3 id="information-2004sdsindex.html">Information: <a href="2004/sds/index.html">2004/sds/index.html</a></h3>
|
||
<p>The generated code will very likely segfault or do something not intended if not
|
||
given the right args. See the index.html file for the correct syntax.</p>
|
||
<h1 id="section-21"><a name="2005"></a>2005</h1>
|
||
<h2 id="anon"><a name="2005_anon"></a>2005/anon</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-36">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2005anonanon.c">Source code: <a href="2005/anon/anon.c">2005/anon/anon.c</a></h3>
|
||
<h3 id="information-2005anonindex.html">Information: <a href="2005/anon/index.html">2005/anon/index.html</a></h3>
|
||
<p>This program sometimes will create unsolvable puzzles :-) just to hook you.
|
||
As a protection against this - and to prevent you from spending too much time on
|
||
such puzzles (or too big puzzles if you insist on doing this) - it deliberately
|
||
destroys its runtime stack. See the <a href="2005/anon/index.html">index.html</a> for more
|
||
details on this.</p>
|
||
<p>If you specify more than three args the program might also crash or do something
|
||
strange. This might also happen if you specify excessively large board
|
||
dimensions. Try <code>100 100 100</code> for instance and see what happens!</p>
|
||
<h2 id="giljade"><a name="2005_giljade"></a>2005/giljade</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-37">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2005giljadegiljade.c">Source code: <a href="2005/giljade/giljade.c">2005/giljade/giljade.c</a></h3>
|
||
<h3 id="information-2005giljadeindex.html">Information: <a href="2005/giljade/index.html">2005/giljade/index.html</a></h3>
|
||
<p>This entry will very likely segfault or do something strange if the source code
|
||
does not exist.</p>
|
||
<p>This entry requires that <code>sed</code> and <code>make</code> are in the path.</p>
|
||
<h2 id="mikeash"><a name="2005_mikeash"></a>2005/mikeash</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-38">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2005mikeashmikeash.c">Source code: <a href="2005/mikeash/mikeash.c">2005/mikeash/mikeash.c</a></h3>
|
||
<h3 id="information-2005mikeashindex.html">Information: <a href="2005/mikeash/index.html">2005/mikeash/index.html</a></h3>
|
||
<p>The author states:</p>
|
||
<ul>
|
||
<li><p>The only built-in functions are <code>defvar</code>, <code>format</code>, <code>substitute</code>,
|
||
<code>char-upcase</code>, <code>+</code>, <code>-</code>, <code>*</code>, and <code>/</code>.</p></li>
|
||
<li><p>Only one variable is available. This variable is called <code>q</code>, although any
|
||
symbol name starting with the letter <code>q</code> will be mapped to this variable.</p></li>
|
||
<li><p>Only the first letter of a function name is significant. For example,
|
||
<code>format</code>, <code>f</code>, <code>farm</code>, and various other words starting with <code>f</code> will all map to
|
||
the <code>format</code> function.</p></li>
|
||
<li><p>The <code>defvar</code> function completely ignores its first parameter. It will always
|
||
store the result of evaluating its second parameter in <code>q</code>. Unlike in <a href="https://en.wikipedia.org/wiki/Common_Lisp">Common
|
||
Lisp</a>, multiple invocations of
|
||
<code>defvar</code> on the same variable will overwrite old values.</p></li>
|
||
<li><p>Character constants are limited to <code>#\Newline</code> and single-character
|
||
constants such as <code>#\x</code>.</p></li>
|
||
<li><p>The <code>char-upcase</code> function will give strange results if passed something
|
||
other than a lowercase character.</p></li>
|
||
<li><p>The <code>format</code> function takes exactly three parameters. The first parameter is
|
||
ignored; output always goes to <code>stdout</code>. The second parameter must have exactly
|
||
one <code>~s</code> format specifier in it, and no other format specifiers are permitted.</p></li>
|
||
<li><p>The arithmetic functions take exactly two parameters.</p></li>
|
||
<li><p>All tokens must be separated from a following <code>)</code> by whitespace.</p></li>
|
||
<li><p>A lot of other things. Notably, the language which this program interprets is
|
||
nowhere near
|
||
<a href="https://en.wikipedia.org/wiki/Turing_completeness">Turing-complete</a>.</p></li>
|
||
</ul>
|
||
<p>Basically, the [LISP][] interpreter is good for some basic math operations, and
|
||
for running itself.</p>
|
||
<h2 id="mynx"><a name="2005_mynx"></a>2005/mynx</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-39">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2005mynxmynx.c">Source code: <a href="2005/mynx/mynx.c">2005/mynx/mynx.c</a></h3>
|
||
<h3 id="information-2005mynxindex.html">Information: <a href="2005/mynx/index.html">2005/mynx/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> notes that, though
|
||
probably obvious, this entry will not work with https. He added an alt version
|
||
that scans for https in case someone wants to set up a pipeline or other
|
||
workaround (perhaps with stunnel) or even add additional code to it to make it
|
||
work with https but the problem otherwise is a secure connection has to first be
|
||
set up in order to give http commands. This is not a bug but it’s worth pointing
|
||
out as it won’t work on as many websites as it used to including the <a href="https://www.ioccc.org">IOCCC
|
||
website</a> itself.</p>
|
||
<h2 id="sykes"><a name="2005_sykes"></a>2005/sykes</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-40">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2005sykessykes.c">Source code: <a href="2005/sykes/sykes.c">2005/sykes/sykes.c</a></h3>
|
||
<h3 id="information-2005sykesindex.html">Information: <a href="2005/sykes/index.html">2005/sykes/index.html</a></h3>
|
||
<p>The author stated the below points of interest.</p>
|
||
<p>The machine emulated is an older 40 column one so 80 column programs will not
|
||
show up correctly.</p>
|
||
<p>There is no emulation of <a href="https://en.wikipedia.org/wiki/Commodore_PET">PET</a>
|
||
graphics characters.</p>
|
||
<p>The parameter controls the speed of the 60Hz “jiffy clock”, and not the
|
||
processor speed. This means many games may run too fast to be usable -
|
||
it really depends on the speed of your machine.</p>
|
||
<p>Although the PET <a href="https://en.wikipedia.org/wiki/Emulator">emulator</a> can do <code>LOAD</code>
|
||
and <code>SAVE</code>, it cannot <code>VERIFY</code> or <code>OPEN</code> and <code>CLOSE</code> files.</p>
|
||
<p>The <a href="https://en.wikipedia.org/wiki/Commodore_PET">PET</a> hardware
|
||
<a href="https://en.wikipedia.org/wiki/Emulator">emulation</a> is not at all complete -
|
||
features such as the hardware timers are completely missing. Some programs will
|
||
not run correctly.</p>
|
||
<p>The
|
||
<a href="https://en.wikipedia.org/wiki/MOS_Technology_6502#Technical_description">6502</a>
|
||
<a href="https://en.wikipedia.org/wiki/Emulator">emulation</a> does not include the seldom
|
||
used decimal mode, or any of the “undocumented” instructions.</p>
|
||
<h1 id="section-22"><a name="2006"></a>2006</h1>
|
||
<h2 id="birken"><a name="2006_birken"></a>2006/birken</h2>
|
||
<h3 id="status-uses-gets---change-to-fgets-if-possible-5">STATUS: uses gets() - change to fgets() if possible</h3>
|
||
<h3 id="source-code-2006birkenbirken.c">Source code: <a href="2006/birken/birken.c">2006/birken/birken.c</a></h3>
|
||
<h3 id="information-2006birkenindex.html">Information: <a href="2006/birken/index.html">2006/birken/index.html</a></h3>
|
||
<p>This entry uses <code>gets(3)</code> which is unsafe and provides annoying warnings, most
|
||
obnoxious in macOS as it shows it at runtime (redirecting <code>stderr</code> to
|
||
<code>/dev/null</code> will silence it). The following diff will almost work but it crashes
|
||
with at least <code>computer.tofu</code> input file:</p>
|
||
<div class="sourceCode" id="cb67"><pre class="sourceCode diff"><code class="sourceCode diff"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a><span class="dt">12a13</span></span>
|
||
<span id="cb67-2"><a href="#cb67-2" aria-hidden="true" tabindex="-1"></a>#define gets(c) fgets((c),PI,stdin)&&(((c)[strlen((c))-1]='\0'),c!=NULL)</span></code></pre></div>
|
||
<h2 id="borsanyi"><a name="2006_borsanyi"></a>2006/borsanyi</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-41">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2006borsanyiborsanyi.c">Source code: <a href="2006/borsanyi/borsanyi.c">2006/borsanyi/borsanyi.c</a></h3>
|
||
<h3 id="information-2006borsanyiindex.html">Information: <a href="2006/borsanyi/index.html">2006/borsanyi/index.html</a></h3>
|
||
<p>The string specified must be <= 42 characters and may only consist of the
|
||
characters in the regex <code>a-z_A-Z0-9@.-</code>. Breaking these constraints will end up
|
||
with possibly corrupt GIF files.</p>
|
||
<h2 id="monge"><a name="2006_monge"></a>2006/monge</h2>
|
||
<h3 id="status-doesnt-work-with-some-platforms---please-help-us-fix-3">STATUS: doesn’t work with some platforms - please help us fix</h3>
|
||
<h3 id="source-code-2006mongemonge.c">Source code: <a href="2006/monge/monge.c">2006/monge/monge.c</a></h3>
|
||
<h3 id="information-2006mongeindex.html">Information: <a href="2006/monge/index.html">2006/monge/index.html</a></h3>
|
||
<p>This program requires x86 (with an x87 FPU) or x86_64 machine and it requires
|
||
the SDL1 library.</p>
|
||
<p>This program also requires being able to read, write and execute memory. With the
|
||
Apple silicon chips this is not allowed. Fixing this might be quite challenging
|
||
but you are welcome to try and fix it.</p>
|
||
<p>If you do fix this it might be good to fix the alternate code as well or else
|
||
provide it as an additional alt version. Fixing this is very likely to be very
|
||
challenging and in some systems it will not be possible to fix but you are
|
||
welcome to try and fix it if you wish to!</p>
|
||
<h3 id="status-inabiaf---please-do-not-fix-42">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<p>Incorrect formulas will ungracefully crash the program.</p>
|
||
<h2 id="sykes1"><a name="2006_sykes1"></a>2006/sykes1</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-43">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2006sykes1sykes1.c">Source code: <a href="2006/sykes1/sykes1.c">2006/sykes1/sykes1.c</a></h3>
|
||
<h3 id="information-2006sykes1index.html">Information: <a href="2006/sykes1/index.html">2006/sykes1/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<pre><code>If you pick a number higher than 19186, the program will return a
|
||
solution but it will be a rotation of one of the first 19186. This is
|
||
because the cross shaped piece fits 48 ways in the 4x4 cube, but only
|
||
2 of those ways are unique - you can rotate one of those to make any
|
||
of the other 46. The algorithm used always places the cross piece
|
||
first, so the first two placings of that piece result in the 19186
|
||
unique solutions.
|
||
|
||
If you pick a number higher than 460464 (24x19186) the program will
|
||
return without outputting a solution. If you can wait that long.</code></pre>
|
||
<h2 id="toledo2"><a name="2006_toledo2"></a>2006/toledo2</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-44">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2006toledo2toledo2.c">Source code: <a href="2006/toledo2/toledo2.c">2006/toledo2/toledo2.c</a></h3>
|
||
<h3 id="information-2006toledo2index.html">Information: <a href="2006/toledo2/index.html">2006/toledo2/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed this program to
|
||
not crash in macOS (it appeared to work fine in fedora linux on an <code>x86_64</code>
|
||
architecture but he does not know if it crashed in macOS Ventura due to the fact
|
||
it is an <code>arm64</code> CPU - the Apple silicon chip). This fix, BTW, is a mix of a fix
|
||
by <a href="authors.html#Yusuke_Endoh">Yusuke Endoh</a> and Cody’s. Nevertheless there are
|
||
two features that are not bugs. Later the author made some slight changes to
|
||
make it not crash in x86_64 macOS.</p>
|
||
<p>By design this program is supposed to crash on termination. This actually no
|
||
longer seems to happen but we don’t need this to be added even if it might
|
||
be called a bug :-)</p>
|
||
<p>You must type in caps (except in strings) and this program is indeed
|
||
case-sensitive.</p>
|
||
<h1 id="section-23"><a name="2007"></a>2007</h1>
|
||
<p>There was no IOCCC in 2007.</p>
|
||
<h1 id="section-24"><a name="2008"></a>2008</h1>
|
||
<p>There was no IOCCC in 2008.</p>
|
||
<h1 id="section-25"><a name="2009"></a>2009</h1>
|
||
<p>There was no IOCCC in 2009.</p>
|
||
<h1 id="section-26"><a name="2010"></a>2010</h1>
|
||
<p>There was no IOCCC in 2010.</p>
|
||
<h1 id="section-27"><a name="2011"></a>2011</h1>
|
||
<h2 id="borsanyi-1"><a name="2011_borsanyi"></a>2011/borsanyi</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-45">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2011borsanyiborsanyi.c">Source code: <a href="2011/borsanyi/borsanyi.c">2011/borsanyi/borsanyi.c</a></h3>
|
||
<h3 id="information-2011borsanyiindex.html">Information: <a href="2011/borsanyi/index.html">2011/borsanyi/index.html</a></h3>
|
||
<p>For a great amount of data points the program will crash, depending on your
|
||
available stack space.</p>
|
||
<p>Giving too few (distinct) points can also cause a crash or division by zero.</p>
|
||
<p>The program expects plain numbers separated by whitespace.</p>
|
||
<p>This program assumes ASCII.</p>
|
||
<p>If you give the program any arg it might flood the screen.</p>
|
||
<p>It requires both syscalls <code>fork(2)</code> and <code>wait(2)</code>.</p>
|
||
<p>Giving any arg to the program is likely to flood your screen.</p>
|
||
<p>Rounding errors might cause an omission in the highest bin. There might be empty
|
||
bins at the edges.</p>
|
||
<h2 id="dlowe-2"><a name="2011_dlowe"></a>2011/dlowe</h2>
|
||
<h3 id="status-missing-or-dead-link---please-provide-them-5">STATUS: missing or dead link - please provide them</h3>
|
||
<h3 id="source-code-2011dlowedlowe.c">Source code: <a href="2011/dlowe/dlowe.c">2011/dlowe/dlowe.c</a></h3>
|
||
<h3 id="information-2011dloweindex.html">Information: <a href="2011/dlowe/index.html">2011/dlowe/index.html</a></h3>
|
||
<p>The author’s website, http://www.pootpoot.net, no longer exists as it once did,
|
||
instead being something else entirely. The Internet Wayback Machine, although it
|
||
archived it, did not load scripts. Do you know if the domain was moved? Do you
|
||
have an archive or mirror? Please provide us it! Thank you.</p>
|
||
<h3 id="status-inabiaf---please-do-not-fix-46">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<p>The author states the following:</p>
|
||
<ul>
|
||
<li><p>Bad input (e.g. nonexistent files, non-numeric number of iterations, etc.)
|
||
tends to result in empty output.</p></li>
|
||
<li><p>Given exactly one corpus, the program will crash or produce garbage.</p></li>
|
||
<li><p>Leaks memory and file descriptors while processing files.</p></li>
|
||
<li><p>Will crash and die horribly if it runs out of memory.</p></li>
|
||
</ul>
|
||
<p>If you want to try and fix this (mis)feature, you are welcome to try.</p>
|
||
<h2 id="fredriksson"><a name="2011_fredriksson"></a>2011/fredriksson</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-47">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2011fredrikssonfredriksson.c">Source code: <a href="2011/fredriksson/fredriksson.c">2011/fredriksson/fredriksson.c</a></h3>
|
||
<h3 id="information-2011fredrikssonindex.html">Information: <a href="2011/fredriksson/index.html">2011/fredriksson/index.html</a></h3>
|
||
<p>The author stated that there are a number of features and limitations. As the
|
||
list is rather long see <a href="2011/fredriksson/index.html#other-features">other
|
||
features</a> and <a href="2011/fredriksson/index.html#limitations-and-remarks">limitations and
|
||
remarks</a> instead.</p>
|
||
<h2 id="richards"><a name="2011_richards"></a>2011/richards</h2>
|
||
<h3 id="status-doesnt-work-with-some-platforms---please-help-us-fix-4">STATUS: doesn’t work with some platforms - please help us fix</h3>
|
||
<h3 id="source-code-2011richardsrichards.c">Source code: <a href="2011/richards/richards.c">2011/richards/richards.c</a></h3>
|
||
<h3 id="information-2011richardsindex.html">Information: <a href="2011/richards/index.html">2011/richards/index.html</a></h3>
|
||
<p>This does not appear to work with macOS, resulting in a segfault (and sometimes
|
||
a bus error).</p>
|
||
<p>We’re not sure if this is to do with the Apple silicon chip or not but it seems
|
||
like it <em>might</em> (see Apple resources below) be but it could also be a wider
|
||
problem with macOS. It appears that Apple does not allow certain combinations of
|
||
memory protections with the arm64 processor.</p>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> tried some of the
|
||
workarounds but at this time he could not get it to work. He offers some earlier
|
||
debugging sessions below as well as a resource from the author as well as some
|
||
resources on Apple’s website should anyone wish to take a crack at it. He might
|
||
address it later but a starting point might be in
|
||
<a href="2011/richards/richards.alt.c">richards.alt.c</a>.</p>
|
||
<h3 id="debugging">Debugging</h3>
|
||
<p>At first glance it appeared to be that it might be the function pointers or the
|
||
fact it is trying to execute code in memory (as noted above). The function
|
||
pointers were changed a bit but this has not helped solve the problem with
|
||
macOS. A few things that were noticed depending on <code>asan</code> sanitisers specified.
|
||
With <code>address</code> in linux:</p>
|
||
<pre><code>richards.c:101:9: runtime error: null pointer passed as argument 2, which is declared to never be null</code></pre>
|
||
<p>but it actually works. This code is:</p>
|
||
<div class="sourceCode" id="cb70"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span> <span class="cf">else</span></span>
|
||
<span id="cb70-2"><a href="#cb70-2" aria-hidden="true" tabindex="-1"></a> p<span class="op">++;</span></span>
|
||
<span id="cb70-3"><a href="#cb70-3" aria-hidden="true" tabindex="-1"></a> W<span class="op">(</span>c<span class="op">)}</span> <span class="co">/* LINE 101 */</span></span>
|
||
<span id="cb70-4"><a href="#cb70-4" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span></code></pre></div>
|
||
<p>Okay but what about argument 2? Well <code>W</code> is defined as:</p>
|
||
<div class="sourceCode" id="cb71"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define W</span><span class="op">(</span><span class="pp">c</span><span class="op">)</span><span class="pp"> e</span><span class="op">=</span><span class="pp">memmove</span><span class="op">(</span><span class="pp">e</span><span class="op">,</span><span class="pp">x</span><span class="op">[(</span>u<span class="op">)</span><span class="pp">c</span><span class="op">],</span><span class="pp"> y</span><span class="op">[(</span>u<span class="op">)</span><span class="pp">c</span><span class="op">])+</span><span class="pp">y</span><span class="op">[(</span>u<span class="op">)</span><span class="pp">c</span><span class="op">];</span></span></code></pre></div>
|
||
<p>so it would appear that</p>
|
||
<div class="sourceCode" id="cb72"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a>x<span class="op">[(</span>u<span class="op">)</span>c<span class="op">]</span></span></code></pre></div>
|
||
<p>(at least in my tired head?) is NULL. But why does it work then?</p>
|
||
<p>NOTE: <code>u</code> is <code>int</code>.</p>
|
||
<p>Under macOS (with the arm64 chip) we get:</p>
|
||
<pre><code>UndefinedBehaviorSanitizer:DEADLYSIGNAL
|
||
==10834==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address 0xffffffffffffffff (pc 0x00019f446748 bp 0x00016f353100 sp 0x00016f352b90 T139066)
|
||
==10834==The signal is caused by a WRITE memory access.
|
||
#0 0x19f446748 in _platform_memmove+0xa8 (libsystem_platform.dylib:arm64e+0x3748) (BuildId: 756cd10d62a032839e57cbaa810c95ac32000000200000000100000000030d00)
|
||
#1 0x100c33c2c in main richards.c:202
|
||
#2 0x19f0bff24 (<unknown module>)
|
||
|
||
==10834==Register values:
|
||
x[0] = 0xffffffffffffffff x[1] = 0x0000000100ab18c1 x[2] = 0x00000000000000cf x[3] = 0x0000000000000000
|
||
x[4] = 0x0000000100ab18a1 x[5] = 0x0000000000000001 x[6] = 0x000000000000000a x[7] = 0x0000000000000000
|
||
x[8] = 0x00000001015972b8 x[9] = 0xffffffffffffffff x[10] = 0x0000000000000001 x[11] = 0x00000000000001f0
|
||
x[12] = 0x0000000000000001 x[13] = 0x00000000000003e0 x[14] = 0x0000000000000001 x[15] = 0x0000000000000084
|
||
x[16] = 0x000000019f4466a0 x[17] = 0x00000001ff3ad908 x[18] = 0x0000000000000000 x[19] = 0x0000000100c32a80
|
||
x[20] = 0x00000001017e0000 x[21] = 0x00000001017e1910 x[22] = 0x000000016f353530 x[23] = 0x000000019f13a366
|
||
x[24] = 0x000000016f3534b0 x[25] = 0x0000000000000001 x[26] = 0x0000000000000000 x[27] = 0x0000000000000000
|
||
x[28] = 0x0000000000000000 fp = 0x000000016f353100 lr = 0x0000000100aaf880 sp = 0x000000016f352b90
|
||
UndefinedBehaviorSanitizer can not provide additional info.
|
||
SUMMARY: UndefinedBehaviorSanitizer: SEGV (libsystem_platform.dylib:arm64e+0x3748) (BuildId: 756cd10d62a032839e57cbaa810c95ac32000000200000000100000000030d00) in _platform_memmove+0xa8
|
||
==10834==ABORTING</code></pre>
|
||
<p>and naturally it does not work.</p>
|
||
<p>Adding the proper <code>PROT_WRITE</code> constant to the <code>mmap()</code> call does not seem to
|
||
help. Of course with the address this is not surprising so why is a different
|
||
address allocated in macOS? Or is it?</p>
|
||
<p>Now with <code>address</code> sanitiser both linux and macOS crash at:</p>
|
||
<pre><code>=================================================================
|
||
==10983==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x00016f8d5e78 at pc 0x0001005dd910 bp 0x00016f8d5cd0 sp 0x00016f8d5cc8
|
||
READ of size 8 at 0x00016f8d5e78 thread T0
|
||
#0 0x1005dd90c in rd richards.c:132
|
||
#1 0x1005ddf8c in re richards.c:149
|
||
#2 0x1005110a0 in t richards.c:108
|
||
#3 0x1005df72c in main richards.c:189
|
||
#4 0x19f0bff24 (<unknown module>)
|
||
|
||
Address 0x00016f8d5e78 is located in stack of thread T0 at offset 56 in frame
|
||
#0 0x1005dd678 in rd richards.c:129
|
||
|
||
This frame has 2 object(s):
|
||
[32, 36) 'v.addr'
|
||
[48, 56) 'a' (line 130) <== Memory access at offset 56 overflows this variable
|
||
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
|
||
(longjmp and C++ exceptions *are* supported)
|
||
SUMMARY: AddressSanitizer: stack-buffer-overflow richards.c:132 in rd
|
||
Shadow bytes around the buggy address:
|
||
0x00702df3ab70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3ab80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3ab90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3aba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3abb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
=>0x00702df3abc0: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 04 f2 00[f3]
|
||
0x00702df3abd0: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3abe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3abf0: 00 00 00 00 f1 f1 f1 f1 00 f3 f3 f3 00 00 00 00
|
||
0x00702df3ac00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
0x00702df3ac10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
Shadow byte legend (one shadow byte represents 8 application bytes):
|
||
Addressable: 00
|
||
Partially addressable: 01 02 03 04 05 06 07
|
||
Heap left redzone: fa
|
||
Freed heap region: fd
|
||
Stack left redzone: f1
|
||
Stack mid redzone: f2
|
||
Stack right redzone: f3
|
||
Stack after return: f5
|
||
Stack use after scope: f8
|
||
Global redzone: f9
|
||
Global init order: f6
|
||
Poisoned by user: f7
|
||
Container overflow: fc
|
||
Array cookie: ac
|
||
Intra object redzone: bb
|
||
ASan internal: fe
|
||
Left alloca redzone: ca
|
||
Right alloca redzone: cb
|
||
==10983==ABORTING
|
||
/bin/bash: line 1: 10983 Abort trap: 6 ./richards</code></pre>
|
||
<p>which corresponds to the code:</p>
|
||
<div class="sourceCode" id="cb75"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a>o rd<span class="op">(</span>u v<span class="op">)</span></span>
|
||
<span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
|
||
<span id="cb75-3"><a href="#cb75-3" aria-hidden="true" tabindex="-1"></a> o <span class="op">*</span>a <span class="op">=</span> <span class="dv">0</span><span class="op">,</span> <span class="op">**</span>b <span class="op">=</span> <span class="op">&</span>a<span class="op">,</span> <span class="op">**</span>c <span class="op">=</span> b <span class="op">+</span> <span class="dv">32</span><span class="op">;</span></span>
|
||
<span id="cb75-4"><a href="#cb75-4" aria-hidden="true" tabindex="-1"></a> x<span class="op">[</span>v<span class="op">]</span> <span class="op">=</span> w<span class="op">;</span></span>
|
||
<span id="cb75-5"><a href="#cb75-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(;</span> b <span class="op"><</span> c <span class="op">&&</span> <span class="op">(*</span>b <span class="op"><</span> <span class="op">(</span>o <span class="op">*)</span>w <span class="op">||</span> <span class="op">*</span>b <span class="op">></span> <span class="op">(</span>o <span class="op">*)</span> T <span class="op">||</span> <span class="op">*</span>b <span class="op">==</span> <span class="op">&</span>v<span class="op">);</span> b<span class="op">++);</span> <span class="co">/* LINE 132 */</span></span></code></pre></div>
|
||
<p>but this seems to not necessarily be relevant since without it it works in
|
||
linux.</p>
|
||
<p>A warning of interest when compiling is:</p>
|
||
<pre><code>
|
||
richards.c:169:15: warning: incompatible pointer types initializing 'f *' (aka 'void (**)(volatile void *)') with an expression of type 'o ()' (aka 'void ()') [-Wincompatible-pointer-types]
|
||
f *lib1[] = { T, T, T, T, T } ;
|
||
|
||
...
|
||
|
||
richards.c:170:15: warning: incompatible pointer types initializing 'f *' (aka 'void (**)(volatile void *)') with an expression of type 'o ()' (aka 'void ()') [-Wincompatible-pointer-types]
|
||
f *lib2[] = { T, ld, lp, lx, l1 } ;
|
||
^
|
||
richards.c:170:18: warning: incompatible pointer types initializing 'f *' (aka 'void (**)(volatile void *)') with an expression of type 'void (volatile dt)' (aka 'void (struct (unnamed at richards.c:36:3) *volatile)') [-Wincompatible-pointer-types]
|
||
f *lib2[] = { T, ld, lp, lx, l1 } ;
|
||
^~
|
||
richards.c:170:22: warning: incompatible pointer types initializing 'f *' (aka 'void (**)(volatile void *)') with an expression of type 'void (volatile dt)' (aka 'void (struct (unnamed at richards.c:36:3) *volatile)') [-Wincompatible-pointer-types]
|
||
f *lib2[] = { T, ld, lp, lx, l1 } ;
|
||
^~
|
||
richards.c:170:26: warning: incompatible pointer types initializing 'f *' (aka 'void (**)(volatile void *)') with an expression of type 'void (volatile dt)' (aka 'void (struct (unnamed at richards.c:36:3) *volatile)') [-Wincompatible-pointer-types]
|
||
f *lib2[] = { T, ld, lp, lx, l1 } ;
|
||
^~
|
||
richards.c:170:30: warning: incompatible pointer types initializing 'f *' (aka 'void (**)(volatile void *)') with an expression of type 'void (volatile dt)' (aka 'void (struct (unnamed at richards.c:36:3) *volatile)') [-Wincompatible-pointer-types]
|
||
f *lib2[] = { T, ld, lp, lx, l1 } ;
|
||
^~</code></pre>
|
||
<p>This can be fixed easily enough however but it doesn’t appear to matter in this
|
||
case.</p>
|
||
<h3 id="testing-fixes">Testing fixes</h3>
|
||
<p>It might be helpful to use the <a href="2011/richards/try.alt.sh">try.alt.sh</a> script to
|
||
test that it does not crash and functions properly.</p>
|
||
<h3 id="resources">Resources</h3>
|
||
<h4 id="more-from-the-author">More from the author</h4>
|
||
<p>The author has more about the entry at
|
||
<a href="https://github.com/GregorR/ioccc2011" class="uri">https://github.com/GregorR/ioccc2011</a>.</p>
|
||
<h4 id="apple-resources">Apple resources</h4>
|
||
<p><a href="https://developer.apple.com/documentation/apple-silicon/porting-just-in-time-compilers-to-apple-silicon?language=objc">Porting Just-In-Time Compilers to Apple
|
||
Silicon</a></p>
|
||
<p><a href="https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit?language=objc">Allow Execution of JIT-compiled Code
|
||
Entitlement</a></p>
|
||
<p>Looking at
|
||
<a href="https://github.com/apple/darwin-xnu/blob/5394bb038891708cd4ba748da79b90a33b19f82e/bsd/kern/kern_mman.c" class="uri">https://github.com/apple/darwin-xnu/blob/5394bb038891708cd4ba748da79b90a33b19f82e/bsd/kern/kern_mman.c</a>
|
||
Cody noticed a curious thing in the <code>mprotect()</code> function: <code>#if CONFIG_DYNAMIC_CODE_SIGNING</code> and the protection variable has the
|
||
<code>VM_PROT_TRUSTED</code> set it might allow overriding the problem but this is
|
||
unconfirmed and it’s not known when <code>CONFIG_DYNAMIC_CODE_SIGNING</code> would be
|
||
defined.</p>
|
||
<p>Do you have a fix? We welcome it!</p>
|
||
<h2 id="vik"><a name="2011_vik"></a>2011/vik</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-48">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2011vikvik.c">Source code: <a href="2011/vik/vik.c">2011/vik/vik.c</a></h3>
|
||
<h3 id="information-2011vikindex.html">Information: <a href="2011/vik/index.html">2011/vik/index.html</a></h3>
|
||
<p>The author stated that the program will crash if no argument is passed to the
|
||
program though we note that your computer might also <a href="https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)">halt and catch
|
||
fire</a> :-)</p>
|
||
<h1 id="section-28"><a name="2012"></a>2012</h1>
|
||
<h2 id="blakely"><a name="2012_blakely"></a>2012/blakely</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-49">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2012blakelyblakely.c">Source code: <a href="2012/blakely/blakely.c">2012/blakely/blakely.c</a></h3>
|
||
<h3 id="information-2012blakelyindex.html">Information: <a href="2012/blakely/index.html">2012/blakely/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<pre><code>If there is a division by zero, square-root of a negative number, or similar
|
||
operation, then the results are undefined.</code></pre>
|
||
<h2 id="deckmyn"><a name="2012_deckmyn"></a>2012/deckmyn</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-50">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2012deckmyndeckmyn.c">Source code: <a href="2012/deckmyn/deckmyn.c">2012/deckmyn/deckmyn.c</a></h3>
|
||
<h3 id="information-2012deckmynindex.html">Information: <a href="2012/deckmyn/index.html">2012/deckmyn/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<pre><code>The memory locations of `argv` are used for various purposes. Therefore, the
|
||
program name (default `deckmyn`) must be *at least 4 characters long*, including
|
||
possibly the path. This, along with the ending `'\0'`, gives a minimum 5 bytes of
|
||
useful memory space. Otherwise, the program may attempt to write outside the
|
||
string.
|
||
|
||
The code is quite sensitive. Errors in the input can lead to strange results.
|
||
The code does not read beyond the end of the music input, but that is about the
|
||
only error checking available. Any input that is not according to the rules in
|
||
the deckmyn.html, may cause errors.
|
||
|
||
The program has no special hardware limitations or requirements, other than 8bit
|
||
`char` (`signed` or `unsigned`) and two's complement negatives.
|
||
|
||
The limitations of using `char` as counters for e.g. the number of music staves
|
||
are minor. 127 staves to a page is rather a lot.
|
||
|
||
The file layout must be exactly the same as deckmyn.c though, only the locations
|
||
of space (`" "`) may differ.
|
||
|
||
Every element in the music is given by a string of *exactly* 3 characters. Any
|
||
violation of this will result in the rest of the music being interpreted in some
|
||
randomly wrong way. Notice that in a file, the newline is also a character!
|
||
Therefore, when preparing music in a file, care should be taken that the last
|
||
musical element of a line is only 2 characters!</code></pre>
|
||
<p>The manual referred to is <a href="2012/deckmyn/deckmyn.html">here</a>.</p>
|
||
<h2 id="dlowe-3"><a name="2012_dlowe"></a>2012/dlowe</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-51">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2012dlowedlowe.c">Source code: <a href="2012/dlowe/dlowe.c">2012/dlowe/dlowe.c</a></h3>
|
||
<h3 id="information-2012dloweindex.html">Information: <a href="2012/dlowe/index.html">2012/dlowe/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<ul>
|
||
<li>Flicker, especially at high speeds, and in spite of “double-buffering” (X11
|
||
doesn’t make it possible to lock drawing to the display refresh rate.)</li>
|
||
<li>Cannot be run outside of the directory containing the data files (<code>splash.d</code>,
|
||
<code>dead.d</code> and <code>sprites.d</code>).</li>
|
||
<li>Cannot build or run without X11 (or an X11 compatibility layer).</li>
|
||
</ul>
|
||
<h2 id="tromp"><a name="2012_tromp"></a>2012/tromp</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-52">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2012tromptromp.c">Source code: <a href="2012/tromp/tromp.c">2012/tromp/tromp.c</a></h3>
|
||
<h3 id="information-2012trompindex.html">Information: <a href="2012/tromp/index.html">2012/tromp/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<pre><code>If the input doesn't start with a valid program, that is,
|
||
if the interpreter reaches end-of-file during program parsing,
|
||
it will crash in some way. E.g. the following might dump core:
|
||
|
||
echo -n "U" | ./tromp
|
||
|
||
Furthermore, the interpreter requires the initial encoded lambda term to be closed,
|
||
that is, variable n can only appear within at least 'n' enclosing lambdas.
|
||
For instance, here the term '\ 5' is not closed, causing the interpreter to crash when
|
||
looking into a null-pointer environment:
|
||
|
||
echo ">Hello, world" | ./tromp
|
||
|
||
will likely dump core.
|
||
</code></pre>
|
||
<h2 id="vik-1"><a name="2012_vik"></a>2012/vik</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-53">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2012vikvik.c">Source code: <a href="2012/vik/vik.c">2012/vik/vik.c</a></h3>
|
||
<h3 id="information-2012vikindex.html">Information: <a href="2012/vik/index.html">2012/vik/index.html</a></h3>
|
||
<p>The author stated that the program will crash if no argument is passed to the
|
||
program or if invalid arguments (e.g. file does not exist) or images of
|
||
mismatching sizes or unsupported pixel formats though we note that your computer
|
||
might also <a href="https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)">halt and catch
|
||
fire</a> :-)</p>
|
||
<h1 id="section-29"><a name="2013"></a>2013</h1>
|
||
<h2 id="cable2"><a name="2013_cable2"></a>2013/cable2</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-54">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013cable2cable2.c">Source code: <a href="2013/cable2/cable2.c">2013/cable2/cable2.c</a></h3>
|
||
<h3 id="information-2013cable2index.html">Information: <a href="2013/cable2/index.html">2013/cable2/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<ul>
|
||
<li>The width of input images must be a multiple of 4.</li>
|
||
<li>Input images can be 8-bit greyscale, 24-bit color or 32-bit color only. 8-bit
|
||
color and 16-bit color are not supported. If you use the “color” command-line
|
||
feature, do not use a greyscale input file!</li>
|
||
<li>Normal Windows BMP files are stored “upside-down”, i.e. the bottom line in the
|
||
image is written first. Some (old) graphics programs actually write BMP files
|
||
“top-to-bottom” and the program does not support such files.</li>
|
||
<li>Using anti-aliased brush strokes to draw your letters is fine; however,
|
||
antialiasing interferes with color detection in “color” mode.</li>
|
||
<li>Only runs on little endian machines (since the BMP format is little endian,
|
||
and endianness conversion would make the source too large for IOCCC rule 2).</li>
|
||
</ul>
|
||
<h2 id="dlowe-4"><a name="2013_dlowe"></a>2013/dlowe</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-55">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013dlowedlowe.c">Source code: <a href="2013/dlowe/dlowe.c">2013/dlowe/dlowe.c</a></h3>
|
||
<h3 id="information-2013dloweindex.html">Information: <a href="2013/dlowe/index.html">2013/dlowe/index.html</a></h3>
|
||
<p>This program will possibly crash or draw something strange with 0 args. Then
|
||
again it might not. :-) This is easy to fix but would add bytes and since the
|
||
author noted it is a feature and not a bug. You of course can try and fix it
|
||
yourself but please do NOT open a pull request for this: just do it as an
|
||
exercise to see if you understand the code.</p>
|
||
<p>You can try and answer the questions, too: when will it crash? When will it draw
|
||
something funny (or will it? :-) ) and when will it just do nothing?</p>
|
||
<p>The author also stated:</p>
|
||
<ul>
|
||
<li>Produces bogus graphs when given > about 5000 arguments.</li>
|
||
<li>Only works if your terminal is UTF-8 and your font supports the 8 glyphs
|
||
used.</li>
|
||
</ul>
|
||
<h2 id="endoh1"><a name="2013_endoh1"></a>2013/endoh1</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-56">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013endoh1endoh1.c">Source code: <a href="2013/endoh1/endoh1.c">2013/endoh1/endoh1.c</a></h3>
|
||
<h3 id="information-2013endoh1index.html">Information: <a href="2013/endoh1/index.html">2013/endoh1/index.html</a></h3>
|
||
<p>From the author:</p>
|
||
<p>–</p>
|
||
<p>This program supports only “Combinator-calculus style notation” of Lazy K.
|
||
“Unlambda style” and “Iota and Jot” style are not supported.</p>
|
||
<p>Also, it requires a space between identifiers. In short, use <code>(S K)</code> instead of
|
||
<code>(SK)</code>, “`sk”, **i<em>i</em>i<em>ii</em>i<em>i</em>ii<code>, or</code>11111100011100`.</p>
|
||
<p>Huge memory may be required to compile the program (about 300 MB on my machine).</p>
|
||
<p>In addition, there are some limitations (and workarounds) mentioned in <a href="2013/endoh1/index.html#spoiler">Spoiler
|
||
section</a>.</p>
|
||
<p>–</p>
|
||
<h2 id="endoh3"><a name="2013_endoh3"></a>2013/endoh3</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-57">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013endoh3endoh3.c">Source code: <a href="2013/endoh3/endoh3.c">2013/endoh3/endoh3.c</a></h3>
|
||
<h3 id="information-2013endoh3index.html">Information: <a href="2013/endoh3/index.html">2013/endoh3/index.html</a></h3>
|
||
<p>From the author:</p>
|
||
<p>–</p>
|
||
<p>You can <em>NOT</em> write a note length immediately followed by a note <code>E</code>,
|
||
such as <code>C2E2</code>.</p>
|
||
<p>Can you figure out why?</p>
|
||
<p>A workaround is inserting a whitespace: <code>C2 E2</code>.</p>
|
||
<p>–</p>
|
||
<h2 id="endoh4"><a name="2013_endoh4"></a>2013/endoh4</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-58">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013endoh4endoh4.c">Source code: <a href="2013/endoh4/endoh4.c">2013/endoh4/endoh4.c</a></h3>
|
||
<h3 id="information-2013endoh4index.html">Information: <a href="2013/endoh4/index.html">2013/endoh4/index.html</a></h3>
|
||
<p>Invalid input files will very likely crash the program.</p>
|
||
<h2 id="hou"><a name="2013_hou"></a>2013/hou</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-59">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013houhou.c">Source code: <a href="2013/hou/hou.c">2013/hou/hou.c</a></h3>
|
||
<h3 id="information-2013houindex.html">Information: <a href="2013/hou/index.html">2013/hou/index.html</a></h3>
|
||
<p>This program will not terminate on its own; you must kill <code>hou</code> (but not Qiming
|
||
Hou :-) ) yourself. This should not be fixed.</p>
|
||
<h2 id="mills"><a name="2013_mills"></a>2013/mills</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-60">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2013millsmills.c">Source code: <a href="2013/mills/mills.c">2013/mills/mills.c</a></h3>
|
||
<h3 id="information-2013millsindex.html">Information: <a href="2013/mills/index.html">2013/mills/index.html</a></h3>
|
||
<p>The author reminds us that if you kill the program you will have to wait a short
|
||
bit of time before you can start it again if you want it to be able to bind to
|
||
the socket (which obviously you do). The source is out the scope of this
|
||
document but the author does mention the well known (at least to those of us who
|
||
have experience with socket programming :-) ) fix. However as the author pointed
|
||
it out as a known limitation it is not a bug but a feature.</p>
|
||
<h1 id="section-30"><a name="2014"></a>2014</h1>
|
||
<h2 id="maffiodo1"><a name="2014_maffiodo1"></a>2014/maffiodo1</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-61">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2014maffiodo1prog.c">Source code: <a href="2014/maffiodo1/prog.c">2014/maffiodo1/prog.c</a></h3>
|
||
<h3 id="information-2014maffiodo1index.html">Information: <a href="2014/maffiodo1/index.html">2014/maffiodo1/index.html</a></h3>
|
||
<p>The author noted that in macOS the colours might be wrong. They gave a solution.
|
||
However Cody didn’t see any problem with it and he beat the series many times.
|
||
Of course the game here is small and he’s practically blind and it’s been a
|
||
while since he last played so it might be wrong. Nevertheless the author does
|
||
give a way to reconfigure the colours.</p>
|
||
<p>The author noted that the character cannot go through walls and the impression
|
||
is that this is how it was believed but Cody ironically pointed out that there
|
||
are known glitches where in some places you actually could go through walls.
|
||
This might even have applied to the arcade version, Mario Bros, though that can
|
||
no longer be confirmed by Cody. The point here is that in this game you cannot
|
||
go through walls but it’s not a bug.</p>
|
||
<p>On the other hand, the author also stated:</p>
|
||
<p>–</p>
|
||
<p>When the <code>Super character</code> becomes bigger (<code>ZOOM</code> flag), the character can
|
||
collide with blocks and get stuck inside them. This is a KNOWN BUG. When your
|
||
player become bigger, stay away from blocks!</p>
|
||
<p>–</p>
|
||
<p>but since it’s documented it’s considered a feature, not a bug to fix.</p>
|
||
<h2 id="maffiodo2"><a name="2014_maffiodo2"></a>2014/maffiodo2</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-62">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2014maffiodo2prog.c">Source code: <a href="2014/maffiodo2/prog.c">2014/maffiodo2/prog.c</a></h3>
|
||
<h3 id="information-2014maffiodo2index.html">Information: <a href="2014/maffiodo2/index.html">2014/maffiodo2/index.html</a></h3>
|
||
<p>This program will very likely crash if no arg is given.</p>
|
||
<h2 id="vik-2"><a name="2014_vik"></a>2014/vik</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-14">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-2014vikprog.c">Source code: <a href="2014/vik/prog.c">2014/vik/prog.c</a></h3>
|
||
<h3 id="information-2014vikindex.html">Information: <a href="2014/vik/index.html">2014/vik/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> discovered a bug to do
|
||
with translating sound to text that shows itself in some cases (it works in
|
||
others) when working on his winning <a href="2020/ferguson2/prog.c">2020 Enigma machine</a>
|
||
(‘Most enigmatic’) entry. See his <a href="2020/ferguson2/index.html">index.html</a> for
|
||
details (search for <code>vik</code> in the file). This one might be more of a limitation
|
||
but this is not known.</p>
|
||
<p>He provides a tip in testing the problem: it might help to use his Enigma
|
||
machine to find problems as it will allow you to verify what is correct and what
|
||
is not. Again see his index.html for details. However it is also possible to not
|
||
rely on the entry as the below shows. One should be able to do:</p>
|
||
<div class="sourceCode" id="cb80"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb80-1"><a href="#cb80-1" aria-hidden="true" tabindex="-1"></a><span class="bu">echo</span> <span class="st">'No. I want chocolate!'</span> <span class="kw">|</span> <span class="ex">./prog</span> <span class="op">></span> chocolate.raw</span>
|
||
<span id="cb80-2"><a href="#cb80-2" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb80-3"><a href="#cb80-3" aria-hidden="true" tabindex="-1"></a><span class="ex">./prog</span> e <span class="op"><</span> chocolate.raw</span></code></pre></div>
|
||
<p>and get:</p>
|
||
<pre><code>No. I want some chocolate!</code></pre>
|
||
<p>but instead we get:</p>
|
||
<pre><code>IT FHOCOLITE!</code></pre>
|
||
<p>which is very wrong. If however one does:</p>
|
||
<pre><code>echo IOCCC | ./prog > ioccc.raw
|
||
|
||
./prog e < ioccc.raw</code></pre>
|
||
<p>they will properly get:</p>
|
||
<pre><code>IOCCC</code></pre>
|
||
<h1 id="section-31"><a name="2015"></a>2015</h1>
|
||
<h2 id="hou-1"><a name="2015_hou"></a>2015/hou</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-63">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2015houprog.c">Source code: <a href="2015/hou/prog.c">2015/hou/prog.c</a></h3>
|
||
<h3 id="information-2015houindex.html">Information: <a href="2015/hou/index.html">2015/hou/index.html</a></h3>
|
||
<p>The author stated:</p>
|
||
<p>–</p>
|
||
<p>Hard requirements:</p>
|
||
<ul>
|
||
<li><p>The platform must implement the <code>double</code> type as IEEE754-compliant 64-bit
|
||
floating point numbers. The 80-bit intermediate format used by x87 is
|
||
considered as an violation of this. The code should print an error message on
|
||
such platforms.</p></li>
|
||
<li><p>The program must start with the CPU / FPU in round-to-nearest mode.</p></li>
|
||
</ul>
|
||
<p>Soft requirements:</p>
|
||
<ul>
|
||
<li><p>The compiler must respect <code>volatile</code>. The code is formatted to warn about
|
||
that, though.</p></li>
|
||
<li><p>The printed result is only correct on little-endian machines. The program
|
||
takes care to warn about this issue after printing an incorrect big-endian
|
||
result. Error messages become garbled, though.</p></li>
|
||
</ul>
|
||
<p>–</p>
|
||
<h2 id="mills2"><a name="2015_mills2"></a>2015/mills2</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-64">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2015mills2prog.c">Source code: <a href="2015/mills2/prog.c">2015/mills2/prog.c</a></h3>
|
||
<h3 id="information-2015mills2index.html">Information: <a href="2015/mills2/index.html">2015/mills2/index.html</a></h3>
|
||
<p>The program doesn’t look at the header of files so if it’s passed something hat
|
||
is not compressed data it’s likely to crash.</p>
|
||
<p>The program depends on little endian systems.</p>
|
||
<h2 id="schweikhardt"><a name="2015_schweikhardt"></a>2015/schweikhardt</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-65">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2015schweikhardtprog.c">Source code: <a href="2015/schweikhardt/prog.c">2015/schweikhardt/prog.c</a></h3>
|
||
<h3 id="information-2015schweikhardtindex.html">Information: <a href="2015/schweikhardt/index.html">2015/schweikhardt/index.html</a></h3>
|
||
<p>The program assumes that <code>EOF</code> is <code>-1</code>. This can be fixed but at this time it is
|
||
uncertain if it should be.</p>
|
||
<p>The author also stated:</p>
|
||
<p>–</p>
|
||
<p>While the program works best when bytes/characters are octets and the
|
||
number of bits in a type is <code>sizeof(typ) << 3</code>, it will work correctly
|
||
on 24-bit or 36-bit systems with 9 bits/byte, or systems where
|
||
<code>sizeof(typ)</code> is 1 even for <code>int</code> and so on. On such systems, it will only
|
||
use <code>8 * sizeof(typ)</code> bits per place. It does not work when <code>CHAR_BIT <= 7</code>.</p>
|
||
<p>–</p>
|
||
<h1 id="section-32"><a name="2016"></a>2016</h1>
|
||
<p>There was no IOCCC in 2016.</p>
|
||
<h1 id="section-33"><a name="2017"></a>2017</h1>
|
||
<p>There was no IOCCC in 2017.</p>
|
||
<h1 id="section-34"><a name="2018"></a>2018</h1>
|
||
<h2 id="algmyr"><a name="2018_algmyr"></a>2018/algmyr</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-66">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2018algmyralgmyr.c">Source code: <a href="2018/algmyr/algmyr.c">2018/algmyr/algmyr.c</a></h3>
|
||
<h3 id="information-2018algmyrindex.html">Information: <a href="2018/algmyr/index.html">2018/algmyr/index.html</a></h3>
|
||
<p>The author wrote:</p>
|
||
<ul>
|
||
<li>There is no error checking done when opening files, so expect segfaults if you
|
||
provide the wrong path to a file.</li>
|
||
<li>This program is bound to misbehave if <code>int</code> is less than 32 bits.</li>
|
||
<li>Flags will only be interpreted correctly if they are the first argument. Reading
|
||
a file named <code>-d</code> or <code>-h</code> is fully possible if it is not the first file
|
||
provided, even though I am not sure why you would want to do that.</li>
|
||
<li>Providing invalid/unexpected arguments to the decode flag will result in odd
|
||
behavior. Some erroneous arguments cause segfaults (negative number of channels,
|
||
channel id outside valid range). One argument in particular causes an infinite
|
||
loop printing whitespace.</li>
|
||
</ul>
|
||
<h2 id="hou-2"><a name="2018_hou"></a>2018/hou</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-67">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2018houprog.c">Source code: <a href="2018/hou/prog.c">2018/hou/prog.c</a></h3>
|
||
<h3 id="information-2018houindex.html">Information: <a href="2018/hou/index.html">2018/hou/index.html</a></h3>
|
||
<p>When you run it on a JSON file you will see something like:</p>
|
||
<div class="sourceCode" id="cb85"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb85-1"><a href="#cb85-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ./prog <span class="op"><</span> ioccc.json <span class="op">></span> ioccc.html</span>
|
||
<span id="cb85-2"><a href="#cb85-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Assertion</span> failed: <span class="er">(</span><span class="ex">rulez</span><span class="kw">)</span><span class="ex">,</span> function C, file prog.c, line 124.</span>
|
||
<span id="cb85-3"><a href="#cb85-3" aria-hidden="true" tabindex="-1"></a><span class="ex">Abort</span> trap: 6</span></code></pre></div>
|
||
<p>(from say running <code>./try.sh) but this is expected and the file</code>ioccc.html` will
|
||
be generated properly.</p>
|
||
<p>Some JSON files might cause the program to continue to run and seemingly
|
||
infinitely increase the size of the output file. This can happen if you try
|
||
fixing the syntax error in the generated <code>ioccc.json</code> file.</p>
|
||
<h2 id="mills-1"><a name="2018_mills"></a>2018/mills</h2>
|
||
<h3 id="status-known-bug---please-help-us-fix-15">STATUS: known bug - please help us fix</h3>
|
||
<h3 id="source-code-2018millsprog.c">Source code: <a href="2018/mills/prog.c">2018/mills/prog.c</a></h3>
|
||
<h3 id="information-2018millsindex.html">Information: <a href="2018/mills/index.html">2018/mills/index.html</a></h3>
|
||
<p>After exiting the program (with ctrl-e) if you try running it again you will
|
||
likely see:</p>
|
||
<pre><code>>bootT5pw
|
||
]h_ 8D3[]</code></pre>
|
||
<p>where <code>[]</code> is the cursor. When this happens if you hit enter (this is necessary
|
||
or else it’ll happen again) and then exit again (ctrl-e) and run <code>prog</code> again
|
||
it’ll be okay.</p>
|
||
<h3 id="status-inabiaf---please-do-not-fix-68">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<p>The author stated that if you make a typo it can happen that the boot loader can
|
||
crash and halt. If this is the case type ctrl-e to quit the emulator and try
|
||
again.</p>
|
||
<p>The author also stated that it is possible to corrupt the virtual disk. If you
|
||
do this you should type <code>make clobber all</code> and try again.</p>
|
||
<p>Cody caused a funny problem where it showed <code>ERROR</code> after each command. The
|
||
solution was to hit ctrl-e and start again. He does not know if this is what was
|
||
referred to by the author but there was likely no typo involved.</p>
|
||
<p>Cody notes that if you are using the saved mode you must type <code>sync</code> prior to
|
||
exiting the program or else the next time you run it the file will not exist (or
|
||
in the case of compiled code it won’t be executable).</p>
|
||
<h2 id="vokes"><a name="2018_vokes"></a>2018/vokes</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-69">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2018vokesvokes.c">Source code: <a href="2018/vokes/vokes.c">2018/vokes/vokes.c</a></h3>
|
||
<h3 id="information-2018vokesindex.html">Information: <a href="2018/vokes/index.html">2018/vokes/index.html</a></h3>
|
||
<p>The author wrote the following:</p>
|
||
<ul>
|
||
<li><p>Despite appearances, it does not handle numbers in hex, or provide
|
||
a <code>curses(3)</code>-based interface.</p></li>
|
||
<li><p>The expected input format is zero or more lines of space-separated
|
||
integers. If other characters appear in the input, it will either
|
||
reject the input entirely and exit with a non-zero status, or skip
|
||
number(s) adjacent to the non-digit characters, depending on where the
|
||
characters appear. Tabs and multiple consecutive spaces are handled
|
||
correctly, however.</p></li>
|
||
<li><p>Individual lines of input longer than <code>0x3543 - 1</code> bytes will be
|
||
split and processed as if they were multiple lines of input, which can
|
||
produce incorrect results. This magic number’s significance is
|
||
described earlier.</p></li>
|
||
<li><p>The algorithm expects its input to represent a fully connected graph.
|
||
While the output is otherwise topologically sorted, if there are nodes
|
||
completely unconnected to the rest of the graph (with or without
|
||
self-cycles), they will be output as soon as they are processed –
|
||
this means that, when there are disconnected nodes, reordering the
|
||
input lines can produce different output. Addressing this by adding
|
||
another pass is would put the program over the size limit.</p></li>
|
||
<li><p>While the node IDs don’t need to be consecutive or start at 0, the
|
||
implementation doesn’t have special handling for sparse graphs. If you
|
||
give it a graph with nodes numbered 0 and 2147483647, it will attempt
|
||
to allocate sufficient memory (potentially around 32 GB) for the
|
||
entire range of graph nodes, even if those are the only ones. If
|
||
memory allocation returns NULL, it will gracefully exit, otherwise it
|
||
will succeed, eventually, perhaps after a great deal of swapping.</p></li>
|
||
<li><p>Node IDs >= 2147483648 will cause the program to print an error
|
||
message and exit with a non-zero status. This shrinks the code that
|
||
detects overflowing the array size by a bit.</p></li>
|
||
<li><p>A very large group of nodes in a cycle can cause a stack overflow.
|
||
This typically takes over 100,000 nodes, and depends on the order the
|
||
nodes are visited. Addressing this would put the program over the size
|
||
limit.</p></li>
|
||
<li><p>The implementation depends on the characters <code>'0'</code>, <code>'1'</code>, … <code>'9'</code> having
|
||
the values <code>48</code> through <code>57</code>, rather than using <code>isdigit(3)</code>. As noted above,
|
||
this program has nothing to do with a hand.</p></li>
|
||
</ul>
|
||
<h1 id="section-35"><a name="2019"></a>2019</h1>
|
||
<h2 id="adamovsky"><a name="2019_adamovsky"></a>2019/adamovsky</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-70">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019adamovskyprog.c">Source code: <a href="2019/adamovsky/prog.c">2019/adamovsky/prog.c</a></h3>
|
||
<h3 id="information-2019adamovskyindex.html">Information: <a href="2019/adamovsky/index.html">2019/adamovsky/index.html</a></h3>
|
||
<p>Certain input can crash this program. The file
|
||
<a href="2019/adamovsky/crash.unl">crash.unl</a> is an example file.</p>
|
||
<h2 id="burton"><a name="2019_burton"></a>2019/burton</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-71">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019burtonprog.c">Source code: <a href="2019/burton/prog.c">2019/burton/prog.c</a></h3>
|
||
<h3 id="information-2019burtonindex.html">Information: <a href="2019/burton/index.html">2019/burton/index.html</a></h3>
|
||
<p>The author pointed out that some implementations of <code>wc(1)</code> show different
|
||
values but his implementation matches that of macOS and FreeBSD.</p>
|
||
<h2 id="ciura"><a name="2019_ciura"></a>2019/ciura</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-72">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019ciuraprog.c">Source code: <a href="2019/ciura/prog.c">2019/ciura/prog.c</a></h3>
|
||
<h3 id="information-2019ciuraindex.html">Information: <a href="2019/ciura/index.html">2019/ciura/index.html</a></h3>
|
||
<p><a href="authors.html#Cody_Boone_Ferguson">Cody Boone Ferguson</a> fixed the scripts so
|
||
that they can work but it might end up that the scripts don’t show any output
|
||
anyway as they use the full alphabet. To test that it works one can have a
|
||
script like:</p>
|
||
<div class="sourceCode" id="cb87"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb87-1"><a href="#cb87-1" aria-hidden="true" tabindex="-1"></a><span class="va">LC_ALL</span><span class="op">=</span>C <span class="ex">aäbcdefghijklmnoöpqrsßtuüvwxyz</span> <span class="kw">|</span> <span class="va">LC_ALL</span><span class="op">=</span>C <span class="fu">grep</span> .. <span class="kw">|</span> <span class="va">LC_ALL</span><span class="op">=</span>de_DE.UTF-8 <span class="ex">./prog</span> aäbcdefghijklmnoöpqrsßtuüvwxyz</span></code></pre></div>
|
||
<p>If you run this you should see:</p>
|
||
<pre><code>aäbcdefghijklmnoöpqrsßtuüvwxyz</code></pre>
|
||
<p>which shows it works. However as the de.sh script refers to all letters it can’t
|
||
find a perfect pangram. BTW, as far as the question of whether the umlaut
|
||
letters or the Eszett are considered letters in the German alphabet, Cody noted
|
||
in the de.sh/de.alt.sh scripts:</p>
|
||
<pre><code># Are the umlauts ä, ö, ü and Eszett (ß) letters in the German alphabet? There
|
||
# is more than one opinion on the subject but a lot of words do have an umlaut
|
||
# (or Umlaut in German). In some (probably all) systems this script outputs
|
||
# nothing probably because it's very hard to form a perfect pangram in German,
|
||
# if it's not impossible. Nevertheless, we do include the other characters
|
||
# whether or not they are in your view considered part of the alphabet for the
|
||
# reason that so many words have them.</code></pre>
|
||
<h2 id="dogon"><a name="2019_dogon"></a>2019/dogon</h2>
|
||
<h3 id="status-uses-gets---change-to-fgets-if-possible-6">STATUS: uses gets() - change to fgets() if possible</h3>
|
||
<h3 id="source-code-2019dogonprog.c">Source code: <a href="2019/dogon/prog.c">2019/dogon/prog.c</a></h3>
|
||
<h3 id="information-2019dogonindex.html">Information: <a href="2019/dogon/index.html">2019/dogon/index.html</a></h3>
|
||
<p>The author does not it uses <code>gets()</code> and one will get warnings but it would be
|
||
ideal if this was not the case.</p>
|
||
<h2 id="duble"><a name="2019_duble"></a>2019/duble</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-73">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019dubleprog.c">Source code: <a href="2019/duble/prog.c">2019/duble/prog.c</a></h3>
|
||
<h3 id="information-2019dubleindex.html">Information: <a href="2019/duble/index.html">2019/duble/index.html</a></h3>
|
||
<p>There are two things to be aware of with this entry.</p>
|
||
<p>If the file being used (to draw) is deleted it might lock any session still in
|
||
use. These will have to be killed from another shell session or by closing the
|
||
terminal tab. This will also happen if the file cannot be opened in the
|
||
beginning.</p>
|
||
<p>This program will also very likely leave sockets lying about in the current
|
||
working directory. For instance <a href="authors.html#Cody_Boone_Ferguson">Cody Boone
|
||
Ferguson</a> showed us this:</p>
|
||
<div class="sourceCode" id="cb90"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb90-1"><a href="#cb90-1" aria-hidden="true" tabindex="-1"></a><span class="ex">$</span> ls <span class="at">-al</span> <span class="kw">|</span><span class="fu">grep</span> <span class="st">'^s'</span></span>
|
||
<span id="cb90-2"><a href="#cb90-2" aria-hidden="true" tabindex="-1"></a><span class="ex">srwxr-xr-x</span> 1 cody staff 0 Apr 6 08:19 .BDHFHALG=</span>
|
||
<span id="cb90-3"><a href="#cb90-3" aria-hidden="true" tabindex="-1"></a><span class="ex">srwxr-xr-x</span> 1 cody staff 0 Apr 6 08:15 .CGGHAMGC=</span>
|
||
<span id="cb90-4"><a href="#cb90-4" aria-hidden="true" tabindex="-1"></a><span class="ex">srwxr-xr-x</span> 1 cody staff 0 Apr 6 08:16 .CMDGAELH=</span>
|
||
<span id="cb90-5"><a href="#cb90-5" aria-hidden="true" tabindex="-1"></a><span class="ex">srwxr-xr-x</span> 1 cody staff 0 Apr 3 08:47 .CMLBCCDA=</span>
|
||
<span id="cb90-6"><a href="#cb90-6" aria-hidden="true" tabindex="-1"></a><span class="ex">[...]</span></span></code></pre></div>
|
||
<p>This is NOT a bug and you’ll have to (at least at this time?) delete the files
|
||
manually. You shouldn’t have to worry about these being added to git: it seems
|
||
to ignore sockets (it did at least in macOS).</p>
|
||
<p>He provides the following tips on this situation. A simpler way to find sockets
|
||
in the directory:</p>
|
||
<div class="sourceCode" id="cb91"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb91-1"><a href="#cb91-1" aria-hidden="true" tabindex="-1"></a><span class="fu">file</span> .<span class="pp">*</span><span class="kw">|</span><span class="fu">grep</span> socket<span class="kw">|</span><span class="fu">cut</span> <span class="at">-f1</span> <span class="at">-d:</span></span></code></pre></div>
|
||
<p>To delete them you can do:</p>
|
||
<div class="sourceCode" id="cb92"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb92-1"><a href="#cb92-1" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> . <span class="at">-exec</span> file <span class="st">'{}'</span> <span class="dt">\;</span><span class="kw">|</span><span class="fu">grep</span> socket<span class="kw">|</span><span class="fu">cut</span> <span class="at">-f</span> 1 <span class="at">-d:</span> <span class="kw">|</span> <span class="fu">xargs</span> rm <span class="at">-f</span></span></code></pre></div>
|
||
<p>though one might want to check that the program is not currently running. :-)</p>
|
||
<h2 id="endoh"><a name="2019_endoh"></a>2019/endoh</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-74">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019endohprog.c">Source code: <a href="2019/endoh/prog.c">2019/endoh/prog.c</a></h3>
|
||
<h3 id="information-2019endohindex.html">Information: <a href="2019/endoh/index.html">2019/endoh/index.html</a></h3>
|
||
<p>As a backtrace quine this entry is <strong>SUPPOSED to segfault</strong> so this should not be
|
||
touched either.</p>
|
||
<h2 id="karns"><a name="2019_karns"></a>2019/karns</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-75">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019karnsprog.c">Source code: <a href="2019/karns/prog.c">2019/karns/prog.c</a></h3>
|
||
<h3 id="information-2019karnsindex.html">Information: <a href="2019/karns/index.html">2019/karns/index.html</a></h3>
|
||
<p>The author stated the following:</p>
|
||
<hr />
|
||
<ul>
|
||
<li>The program must be ran in a terminal that supports ANSI escape codes for
|
||
moving the cursor and changing colors.</li>
|
||
<li>Segfaults happen sometimes.</li>
|
||
<li>I don’t know what memory management there is, if any.</li>
|
||
<li>The program will not compile by an ANSI C compiler: it uses for loops, and
|
||
it uses C++ style comments. It should compile cleanly using a C99 standard.</li>
|
||
<li>Breadth first search is slow (and very slow on certain maps), but my A star
|
||
version of this program is too big.</li>
|
||
<li>Lots of extra whitespace may be needed if you want to feed in an arbitrary
|
||
file.</li>
|
||
<li>It fails to compile on GCC sometimes (according to a friend of mine, I’ve
|
||
not encountered this myself).</li>
|
||
<li>The program could be obfuscated much further.</li>
|
||
<li>The program contains some unused code and data.</li>
|
||
</ul>
|
||
<h2 id="lynn"><a name="2019_lynn"></a>2019/lynn</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-76">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019lynnprog.c">Source code: <a href="2019/lynn/prog.c">2019/lynn/prog.c</a></h3>
|
||
<h3 id="information-2019lynnindex.html">Information: <a href="2019/lynn/index.html">2019/lynn/index.html</a></h3>
|
||
<p>The author wrote that there are a number of differences from what one might
|
||
expect. Rather than duplicate the information we refer you to the author’s
|
||
remarks in the sections <a href="2019/lynn/index.html#syntax">Syntax</a> and
|
||
<a href="2019/lynn/index.html#caveats">Caveats</a>.</p>
|
||
<h2 id="mills-2"><a name="2019_mills"></a>2019/mills</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-77">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019millsprog.c">Source code: <a href="2019/mills/prog.c">2019/mills/prog.c</a></h3>
|
||
<h3 id="information-2019millsindex.html">Information: <a href="2019/mills/index.html">2019/mills/index.html</a></h3>
|
||
<p>The author wrote that if you decide to change networks or use a different input
|
||
file you should delete all the checkpoint files because the format depends on
|
||
both the network and the input – using the wrong checkpoint is likely to cause
|
||
a crash.</p>
|
||
<p>The author also wrote:</p>
|
||
<hr />
|
||
<p><strong>IMPORTANT NOTE</strong>: Since OMLET uses the system stack for network storage,
|
||
larger networks may cause OMLET to crash (typically with a message like
|
||
<code>Segmentation fault</code>) unless the system stack size is first increased.
|
||
The exact command for doing so depends on your shell and your system’s
|
||
hard limits. On <code>sh</code>/<code>ksh</code>/<code>bash</code> shells, you can view the hard limit
|
||
with <code>ulimit -Hs</code> and set it with <code>ulimit -s 65532</code> (replacing <code>65532</code>
|
||
with the actual hard limit). On <code>csh</code>/<code>tcsh</code> shells, you can view
|
||
the hard limit with <code>limit -h stacksize</code> and set it with
|
||
<code>limit stacksize 65532</code> (replacing <code>65532</code> with the actual hard limit).</p>
|
||
<hr />
|
||
<h2 id="poikola"><a name="2019_poikola"></a>2019/poikola</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-78">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019poikolaprog.c">Source code: <a href="2019/poikola/prog.c">2019/poikola/prog.c</a></h3>
|
||
<h3 id="information-2019poikolaindex.html">Information: <a href="2019/poikola/index.html">2019/poikola/index.html</a></h3>
|
||
<p>This program will not validate input so it might fail or get stuck if invoked
|
||
erroneously.</p>
|
||
<p>Also, the maximum file size is 1GB.</p>
|
||
<h2 id="yang"><a name="2019_yang"></a>2019/yang</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-79">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2019yangprog.c">Source code: <a href="2019/yang/prog.c">2019/yang/prog.c</a></h3>
|
||
<h3 id="information-2019yangindex.html">Information: <a href="2019/yang/index.html">2019/yang/index.html</a></h3>
|
||
<p>The author noted that if the program runs out of memory it is likely to crash.</p>
|
||
<p>The author also stated that ‘if input contains CR-LF end of line sequences,
|
||
those <code>CR</code>s are silently dropped. In fact, most control codes are silently
|
||
ignored except line feeds (preserved) and tabs (expanded to 8 spaces).’</p>
|
||
<h1 id="section-36"><a name="2020"></a>2020</h1>
|
||
<h2 id="burton-1"><a name="2020_burton"></a>2020/burton</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-80">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2020burtonprog.c">Source code: <a href="2020/burton/prog.c">2020/burton/prog.c</a></h3>
|
||
<h3 id="information-2020burtonindex.html">Information: <a href="2020/burton/index.html">2020/burton/index.html</a></h3>
|
||
<p>This entry is known to crash if no arg is specified. Although easy to fix it is
|
||
documented and should not be fixed (of course you may fix it to see if you can
|
||
but it shouldn’t be made into a pull request).</p>
|
||
<p>It will also show funny output with more than one arg. This should not be fixed
|
||
either. But can you figure out why this happens?</p>
|
||
<h2 id="carlini"><a name="2020_carlini"></a>2020/carlini</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-81">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2020carliniprog.c">Source code: <a href="2020/carlini/prog.c">2020/carlini/prog.c</a></h3>
|
||
<h3 id="information-2020carliniindex.html">Information: <a href="2020/carlini/index.html">2020/carlini/index.html</a></h3>
|
||
<p>The author stated that bad things happen if the entered move is outside of the
|
||
range [1..9]. We observed a crash but we also observed a tie and other things
|
||
besides (say with the input <code>-1</code>, <code>-</code>, <code>-10</code> and others).</p>
|
||
<p>If a player makes a move over their opponent’s place they will automatically
|
||
lose.</p>
|
||
<p>If a player tries to play a move they already played they will forfeit their
|
||
move.</p>
|
||
<p>If you have audible bells enabled the program will beep at every turn.</p>
|
||
<h2 id="ferguson1"><a name="2020_ferguson1"></a>2020/ferguson1</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-82">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2020ferguson1prog.c">Source code: <a href="2020/ferguson1/prog.c">2020/ferguson1/prog.c</a></h3>
|
||
<h3 id="information-2020ferguson1index.html">Information: <a href="2020/ferguson1/index.html">2020/ferguson1/index.html</a></h3>
|
||
<p>There are some things that might appear to be bugs but are actually features or
|
||
things that are misinterpreted as bugs. See the
|
||
<a href="2020/ferguson1/bugs.html">bugs.html</a> and
|
||
<a href="2020/ferguson1/troubleshooting.html">troubleshooting.html</a> files for details.</p>
|
||
<h2 id="giles"><a name="2020_giles"></a>2020/giles</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-83">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2020gilesprog.c">Source code: <a href="2020/giles/prog.c">2020/giles/prog.c</a></h3>
|
||
<h3 id="information-2020gilesindex.html">Information: <a href="2020/giles/index.html">2020/giles/index.html</a></h3>
|
||
<p>The author noted that the program only supports WAV files that have
|
||
exactly 16 bits per sample, but it allows any sample rate and any number of
|
||
audio channels.</p>
|
||
<h2 id="otterness"><a name="2020_otterness"></a>2020/otterness</h2>
|
||
<h3 id="status-inabiaf---please-do-not-fix-84">STATUS: INABIAF - please <strong>DO NOT</strong> fix</h3>
|
||
<h3 id="source-code-2020otternessprog.c">Source code: <a href="2020/otterness/prog.c">2020/otterness/prog.c</a></h3>
|
||
<h3 id="information-2020otternessindex.html">Information: <a href="2020/otterness/index.html">2020/otterness/index.html</a></h3>
|
||
<p>The author listed the following limitations:</p>
|
||
<ol type="1">
|
||
<li><p>The program does not support MIDI files over 4 MB (specifically, it will
|
||
not take input files larger than <code>2^22 - 1</code> bytes). This is unlikely to be a
|
||
big limitation in practice, since even lengthy MIDIs are rarely over a
|
||
couple hundred KB.</p></li>
|
||
<li><p>Not all MIDIs set (or <em>correctly</em> set) their timing information, which will
|
||
lead to the tempo of the drum beat not matching the track. This will be
|
||
especially true for “live performance” .mid files.</p></li>
|
||
<li><p>There may be some types of MIDI messages that the program is unable to
|
||
correctly parse, but I have rarely seen this in practice. The largest
|
||
cause of program failures, in my experience, has been Limitation 2.</p></li>
|
||
</ol>
|
||
<p>See also the <a href="2020/otterness/index.html#program-error-codes">Program error
|
||
codes</a> written by the author
|
||
which lists some other conditions which should be considered features, not bugs.</p>
|
||
<h1 id="section-37"><a name="2021"></a>2021</h1>
|
||
<p>There was no IOCCC in 2021.</p>
|
||
<h1 id="section-38"><a name="2022"></a>2022</h1>
|
||
<p>There was no IOCCC in 2022.</p>
|
||
<h1 id="section-39"><a name="2023"></a>2023</h1>
|
||
<p>There was no IOCCC in 2023.</p>
|
||
<h1 id="section-40"><a name="2024"></a>2024</h1>
|
||
<p>We hope to run the IOCCCMOCK this year, 2024, and hopefully the next IOCCC, but
|
||
for now we wish everyone a happy new year!</p>
|
||
<h1 id="final-words">Final words</h1>
|
||
<p>We hope this document was of use to you in determining which entries are known
|
||
to have a problem, what entries are known to have features that are not bugs and
|
||
so on. We also thank you for going through this document and, if you propose any
|
||
fixes] via a <a href="https://github.com/ioccc-src/temp-test-ioccc/pulls">GitHub pull
|
||
request</a> or otherwise, we
|
||
thank you as well for the help! We will happily add you to the
|
||
<a href="thanks-for-help.html">thanks</a> file as well.</p>
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||
|
||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||
<!-- START: this line starts content from: inc/end-rightcolumn.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-rightcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/end-row.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-row.default.html -->
|
||
<!-- START: this line starts content from: inc/footer.default.html -->
|
||
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<div class="footer">
|
||
<h2>Copyright and CC BY-SA 4.0 License</h2>
|
||
<p>This file and web page is:</p>
|
||
<blockquote><b>Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.</b></p></blockquote>
|
||
<p>You are free to share and adapt this file under the terms of this license:</p>
|
||
<blockquote><b>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</b></blockquote>
|
||
<p>For more information, see:</p>
|
||
<blockquote><a
|
||
href="https://creativecommons.org/licenses/by-sa/4.0/">https://creativecommons.org/licenses/by-sa/4.0/</a></blockquote>
|
||
<h2>Coda</h2>
|
||
<p><a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fioccc-src.github.io%2Ftemp-test-ioccc%2Flocation.html">Nu HTML check this web page</a></p>
|
||
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/footer.default.html -->
|
||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- END: this line ends content from: inc/bottom.default.html -->
|