Typo fix in bugs.md

It should have said subsection not section when referring to the
requirements of EOF not being that it's -1 but that it's some negative
integer value.

Also made worse not wore.
This commit is contained in:
Cody Boone Ferguson committed 2023-04-02 07:22:44 -07:00
1 parent 113c95702a
commit f2998adcab
1 file changed
+100 -3
+100 -3
View File
@@ -522,13 +522,13 @@ If you join the lines you end up with:
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 `u`. The column to the left is the same for the `t`
buffer size, 100, for `u`! The column to the left is the same for the `t`
variable.
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 required to make the generated code compile at all when changing
the buffer size).
code (this was actually required to make the generated code compile at all when
changing the buffer size, see below).
### Important points:
@@ -550,6 +550,103 @@ can cause a compilation error! Make sure that the output of:
can be compiled and the output of that new program when fed itself can also be
compiled!
## [1994/shapiro](1994/shapiro/shapiro.c) ([README.md](1994/shapiro/README.md))
## STATUS: missing file - please provide it
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) noted that the
README.md 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?
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.
### Important reminder to fix the `-1` value check for `getc()`:
Cody wants to remind you that he fixed the code to not use `-1` for the return
value of `getc()`; this is important because `EOF` is **NOT** guaranteed to be
`-1` but rather any negative value. On systems where `EOF != -1` the program
would enter an infinite loop until the program crashed, by chance reads a `-1`
or was killed. See the README.md for more details. If you don't feel comfortable
changing it to `EOF` Cody will happily do it for you but otherwise go right
ahead. We'll credit you in the README.md file regardless.
## STATUS: doesn't work with some platforms - please help us fix
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) pointed out a potential
bug in [1994/shapiro](1994/shapiro/shapiro.c) on systems where `EOF != -1` as
the code assumes that `EOF` will always be `-1`. As the standard says (see `7.21
Input/output<stdio.h>` subsection 1) it only has to be a negative int, not
necessarily `-1`. The problem is that the source file's last character is a
newline (10 in decimal) and so on systems where `EOF != -1` the `getc()`
functions would not terminate the loop (but see below). This would cause a
breakage in the entry.
However due to clever encoding of the code it is not a simple matter of applying
the following patch:
```diff
diff --git i/1994/shapiro/shapiro.c w/1994/shapiro/shapiro.c
index d2da120c7bc4e251b7624859e48f47f188d398e9..e054a1ceb067b82bf37c07e5ce75e82be7a03b85 100644
--- i/1994/shapiro/shapiro.c
+++ w/1994/shapiro/shapiro.c
@@ -9,11 +9,11 @@
/*PPPPVPOQMQRPR*/=0;FILE/*TPSLUMWQT*/ *
J/*MPRPKPLQ*/; J= fopen(__FILE__
/*T*/,"r");for (;( L/*KPUOWOWMUQ
LLOLMPULWLWL WLW LWLWLWLWLWLW
LWLWLULVOXP LLV LLLOLMPULOL
- MMNP*/=getc (J) )!= -1;L/*
+ MMNP*/=getc (J) )!=EOF;L/*
OLWLRMMQUL VOX PLLVLLLMQO
PMPYPXPNP MQL LVLLLWPSP
XPOQNQOPMQ LLV LTj*/>='J'
&&L/*LRPYP OQL QMQLLVLLL
OLMQVOXPL LVL LLVOe*/<=
```
as doing so will cause `warning: illegal character encoding in string
literal` and the error `error: source file is not valid UTF-8`. Looking at the
file you'll see on line 4 of `shapiro_t2.c`:
```
char *a[]={"%c+------------+\n","%c+%3dPRÒ<82>3·Âå&Â"2W6öæF6'Â"Ò<96>æVGW6'¢ <82>öV'7'Â"R2Çå&Â"Â^E33sÃ^E33³UB¶cS³<83>T2Ç^E33<83>#Ò·£<90>æF^G"¶ÕÕ³^GÃ^BÃ^RsÃ^RCÃ^R^SÃ^BÓ·£Ð^V<96>æ<86>bÇ2<96><92>æF^Gb·3<86>^V&^G¢¢^B2¶£°7<86>^V&^GB¶E^CÓÅ¢RÆbÖc³£@<97>ÖVöE^Gr¶£`<94>ÄT^D¢<82>Æ¢<92>¶£p<87><96>ÆV^F<82>ÒÒb^Fbb^B^R^B<97>^FW<86>B<96>^Bbb^B^Rbö&·<86><92><92>²£<80>ÖcFö^FWæ<86>bÓbÆÃ^SÃ"^R&<92>²<93>ÖcFö^FWæ<86><82>bÓbÆÃ^S<93>²^RÃ""'<92>²£`ö&<87>²³<93>²<97>f<86>b<96>²gvVF7<87>BÆB^CÃ<92><96>²C¶5G'ÇVæ<86>B<96>Ò^RÓÕsÂ^Es²£<90>f<86>¢BÖÓs^Bs²b<96>²7^G'<97>æFg<86>¢2Æ"R2Çå&ÂB¶^R<93>²ó<86>2GGöVGÇbÃbÓbÆB¶^RÃ^B<93>Ò§<90>f<86>¢Bæs^Bs²b<96>ò<86><82>ÆRÃBÆ^BÃ^B<93>ÒWÆ6W¶G<97>ÖV<86>br<96>²SÖ^S67F<97>ÖV<86>Âö6^VÆF<97>ÖV<86>br<96><92>²£`ö&<87>b×^S³cÇc³c·²<92>ò<86><82>Æb^WÒ^Scbb^WÒcÓ^RÃb·r^BsÂ^RF÷<96><86>R¶"¶e×<95>Âb<97>2ÇVV^F<87>^R<93>²Ó××§ 
```
when it should be something entirely different. For what it should be try
running `make clobber all ; cat shapiro_t2.c` or else look at the second program
in the spoilers file [shapiro.md](1994/shapiro/shapiro.md]).
Cody is working will be working on this here and there but if you have a fix or
any suggestions you're welcome to provide it or them.
Cody points you to the README.md file for what should happen when the entry is
successfully compiled (including no compilation errors when running `make
clobber all`).
Another problem is that in the [shapiro.md](shapiro.md) file the first program
does not work.
### Tips on this entry:
Cody provides some tips on this entry:
First: the comments are the important part of this entry. Remove them and the
program breaks.
Second and perhaps part of the problem with changing the code to `EOF` instead
of `-1` is the `for` loop particularly to do with the bitwise operations,
perhaps also made worse by the seemingly gibberish comments.
Another important point is that the Makefile compiles the program as
`shapiro_t1` so that the source code that corresponds with it is actually
[shapiro.c](1994/shapiro/shapiro.c). But notice how running `shapiro_t1` results
in different functionality than `shapiro` itself? The source code that
`shapiro_t1` generates, `shapiro_t2.c`, is what is compiled into `shapiro`.
# 1995