Gallery

IOCCC 2024: Prize in murky waters

This program reads as if it prints a table of squares. Run it, and it prints a salmon recipe. The recipe is spelled in characters from the Unicode Tags block, which no editor or terminal displays, inside the string literal. More tag characters make the grill macro names differ from how they look, so an #undef misses and an invisible macro use runs the printing loop. disclude reports the tag characters, and the page shows each as a visible marker.

Credit
Adrian Cable, IOCCC28 (2024), 2024/cable2
License
CC BY-SA 4.0
File
ioccc_2024_cable2.c (download)
Signals
1 critical · 2 warn · 3 info
Disclude version
4.3.0

Source

Hidden characters are shown as ⟨U+…⟩. Each signal below links to its line.

#include <stdio.h>unsigned int    *salmon = U"⟨U+E0053⟩⟨U+E0065⟩⟨U+E0061⟩⟨U+E0073⟩⟨U+E006F⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E0073⟩⟨U+E0061⟩⟨U+E006C⟩⟨U+E006D⟩⟨U+E006F⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E0066⟩⟨U+E0069⟩⟨U+E006C⟩⟨U+E006C⟩⟨U+E0065⟩⟨U+E0074⟩⟨U+E0073⟩⟨U+E0020⟩⟨U+E0077⟩⟨U+E0069⟩⟨U+E0074⟩⟨U+E0068⟩⟨U+E0020⟩⟨U+E006F⟩⟨U+E006C⟩⟨U+E0069⟩⟨U+E0076⟩⟨U+E0065⟩⟨U+E0020⟩⟨U+E006F⟩⟨U+E0069⟩⟨U+E006C⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E006C⟩⟨U+E0065⟩⟨U+E006D⟩⟨U+E006F⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E006A⟩⟨U+E0075⟩⟨U+E0069⟩⟨U+E0063⟩⟨U+E0065⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0067⟩⟨U+E0061⟩⟨U+E0072⟩⟨U+E006C⟩⟨U+E0069⟩⟨U+E0063⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0073⟩⟨U+E0061⟩⟨U+E006C⟩⟨U+E0074⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0061⟩⟨U+E006E⟩⟨U+E0064⟩⟨U+E0020⟩⟨U+E0070⟩⟨U+E0065⟩⟨U+E0070⟩⟨U+E0070⟩⟨U+E0065⟩⟨U+E0072⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0074⟩⟨U+E0068⟩⟨U+E0065⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E0067⟩⟨U+E0072⟩⟨U+E0069⟩⟨U+E006C⟩⟨U+E006C⟩⟨U+E0020⟩⟨U+E006F⟩⟨U+E0076⟩⟨U+E0065⟩⟨U+E0072⟩⟨U+E0020⟩⟨U+E006D⟩⟨U+E0065⟩⟨U+E0064⟩⟨U+E0069⟩⟨U+E0075⟩⟨U+E006D⟩⟨U+E0020⟩⟨U+E0068⟩⟨U+E0065⟩⟨U+E0061⟩⟨U+E0074⟩⟨U+E0020⟩⟨U+E0066⟩⟨U+E006F⟩⟨U+E0072⟩⟨U+E0020⟩⟨U+E0034⟩⟨U+E002D⟩⟨U+E0036⟩⟨U+E0020⟩⟨U+E006D⟩⟨U+E0069⟩⟨U+E006E⟩⟨U+E0075⟩⟨U+E0074⟩⟨U+E0065⟩⟨U+E0073⟩⟨U+E0020⟩⟨U+E0070⟩⟨U+E0065⟩⟨U+E0072⟩⟨U+E0020⟩⟨U+E0073⟩⟨U+E0069⟩⟨U+E0064⟩⟨U+E0065⟩⟨U+E0020⟩⟨U+E0075⟩⟨U+E006E⟩⟨U+E0074⟩⟨U+E0069⟩⟨U+E006C⟩⟨U+E0020⟩⟨U+E0066⟩⟨U+E006C⟩⟨U+E0061⟩⟨U+E006B⟩⟨U+E0079⟩⟨U+E0020⟩⟨U+E0061⟩⟨U+E006E⟩⟨U+E0064⟩⟨U+E0020⟩⟨U+E0063⟩⟨U+E006F⟩⟨U+E006F⟩⟨U+E006B⟩⟨U+E0065⟩⟨U+E0064⟩⟨U+E0020⟩⟨U+E0074⟩⟨U+E0068⟩⟨U+E0072⟩⟨U+E006F⟩⟨U+E0075⟩⟨U+E0067⟩⟨U+E0068⟩⟨U+E002E⟩⟨U+200A⟩⟨U+2000⟩⟨U+2000⟩is very yummy";#define  grill⟨U+E0041⟩  ;while(putchar(*salmon++))#undef   grill#define ⟨U+E0041⟩ grill⟨U+E0041⟩#undef   grillint main() {⟨U+E0041⟩ ⟨U+E0041⟩  for (int i = 1; i <= 10; i++) {    printf("%d * %d = %d\n", i, i, i*i);  }}

Signals

Ordered by severity.

  1. critical unicode-invisible ioccc_2024_cable2.c:3:29

    161 invisible characters encode hidden payload: "Season salmon fillets with olive oil, lemon juice, garlic, salt, and pepper, then grill over medium heat for 4-6 minutes per side until flaky and cooked through." (raw pass, confidence 0.99)

    unsigned int    *salmon = U"⟨U+E0053⟩⟨U+E0065⟩⟨U+E0061⟩⟨U+E0073⟩⟨U+E006F⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E0073⟩⟨U+E0061⟩⟨U+E006C⟩⟨U+E006D⟩⟨U+E006F⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E0066⟩⟨U+E0069⟩⟨U+E006C⟩⟨U+E006C⟩⟨U+E0065⟩⟨U+E0074⟩⟨U+E0073⟩⟨U+E0020⟩⟨U+E0077⟩⟨U+E0069⟩⟨U+E0074⟩⟨U+E0068⟩⟨U+E0020⟩⟨U+E006F⟩⟨U+E006C⟩⟨U+E0069⟩⟨U+E0076⟩⟨U+E0065⟩⟨U+E0020⟩⟨U+E006F⟩⟨U+E0069⟩⟨U+E006C⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E006C⟩⟨U+E0065⟩⟨U+E006D⟩⟨U+E006F⟩⟨U+E006E⟩⟨U+E0020⟩⟨U+E006A⟩⟨U+E0075⟩⟨U+E0069⟩⟨U+E0063⟩⟨U+E0065⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0067⟩⟨U+E0061⟩⟨U+E0072⟩⟨U+E006C⟩⟨U+E0069⟩⟨U+E0063⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0073⟩⟨U+E0061⟩⟨U+E006C⟩⟨U+E0074⟩⟨U+E002C⟩⟨U+E0020⟩⟨U+E0061⟩⟨U+E006E⟩⟨U+E0064⟩⟨U+E0020⟩⟨U+E0070⟩⟨U+E0065⟩⟨U+E0070⟩⟨U+E0070⟩
  2. warn unicode-invisible ioccc_2024_cable2.c:11:13

    U+E0041 TAG 'A' in source (raw pass, confidence 0.90)

    
    int main() {⟨U+E0041⟩ ⟨U+E0041⟩
      for (int i = 1; i <= 10; i++) {
        printf("%d * %d = %d\n", i, i, i*i);
  3. warn unicode-invisible ioccc_2024_cable2.c:11:18

    U+E0041 TAG 'A' in source (raw pass, confidence 0.90)

    
    int main() {⟨U+E0041⟩ ⟨U+E0041⟩
      for (int i = 1; i <= 10; i++) {
        printf("%d * %d = %d\n", i, i, i*i);
  4. info unicode-invisible ioccc_2024_cable2.c:5:15

    U+E0041 TAG 'A' in source (in string/comment) (raw pass, confidence 0.54)

    
    #define  grill⟨U+E0041⟩  ;while(putchar(*salmon++))
    #undef   grill
  5. info unicode-invisible ioccc_2024_cable2.c:8:9

    U+E0041 TAG 'A' in source (in string/comment) (raw pass, confidence 0.54)

    
    #define ⟨U+E0041⟩ grill⟨U+E0041⟩
    #undef   grill
  6. info unicode-invisible ioccc_2024_cable2.c:8:19

    U+E0041 TAG 'A' in source (in string/comment) (raw pass, confidence 0.54)

    
    #define ⟨U+E0041⟩ grill⟨U+E0041⟩
    #undef   grill

Reproduce

Download the file and scan it. Copying it from this page won't work: the hidden characters are shown as markers.

cargo install disclude --version 4.3.0
curl -o ioccc_2024_cable2.c https://disclude.io/gallery/ioccc-salmon/source
disclude scan --untrusted --severity info ioccc_2024_cable2.c