Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Bitrotten obfuscations

by ambrus (Abbot)
on Oct 21, 2010 at 16:33 UTC ( #866594=obfuscated: print w/replies, xml ) Need Help??

Perl5porters wants us to believe that they care a lots about backwards compatibility. This is, however, not true, as shown by how many of my obfuscations doesn't work anymore with recent perl versions, or they give warnings even when you don't enable warnings.

This node tries to be a comprehensive listing of which of my obfus still work and which don't. I'll try to update this node with newer breakage in the future.

  • LZ77 compression works (as of perl 5.16.1).
  • One-liner japh doesn't work: perl 5.10.0 breaks it with an unnecessary change that doesn't really fix a bug. It could be fixed somehow, for some of the similar obfus I link to still work.
  • Japh algebra works (as of 5.16.1).
  • Fun with duff's device and AUTOLOAD doesn't really count, because it was already sometimes broken when I wrote it, but it definitely doesn't work anywhere on perl 5.10.0 or later.
  • Charnames japh gives an unnecessary default warning on 5.12.0 or later. (It still gives the right result as of 5.16.1.)
  • Indigo japh doesn't work in perl 5.12.0 or later, because split in void context no longer fills @_. As a hotfix, prepend @_ = (that makes it work as of 5.16.1, though since perl 5.12 it also gives a default warning about pop _), but that ruins the aesthetics of the obfu. The second obfu in that same node works (as of 5.13.6).
  • Ode for getprotobyname still works, and so does the variant in Re (Obfu generator for): Ode for getprotobyname (as of 5.16.1).
  • Re: Pattern matching was already broken when I wrote it because it only worked on 32 bit perls that's my fault, it wouldn't have been hard to make it work on 64 bit perls too.
  • Fast Japh works (as of 5.16.1).
  • Digisig doesn't work starting from 5.20, because the old feature it relied on got removed from perl.
  • Re: a poem still works (a of 5.16.1).
  • Ode for the CORE:: package works (as of 5.16.1), but starting from 5.12.0, it gives a default warnings that reveals something about the obfu. (It probably won't work starting from 5.20.0)
  • Faster japh works fine (as of 5.16.1).
  • Japh algebra revisited works (as of 5.16.1), but starting from 5.12.0 it gives an annoying default warning.
  • Twin-lines japh doesn't work and is completely unfixable: perl 5.13.6 fixes just the bug this uses. (It still works with at least 5.13.4.)
  • All of the ones in Re: Fibo Golf challenge on 3 monkeys still work as of ruby 1.9.2.
  • JAPH to commemorate the release of Perl 5.10.0 still works (as of 5.16.1).
  • All the ones in Short quines still work (as of 5.16.1), but variant e gives a default warning starting from 5.12.0. What's the deal with all these default warnings lately? Isn't the whole point of -w that the developer enables it to see what's wrong with the code but users of my code don't need to see it and worry about it?
  • A feature of use still works (as of 5.16.1).
  • General quine still works (as of 5.16.1).
  • Linux console japh still works (as of 5.16.1), provided you can find a linux console and stand far enough from your huge TFT that you can read the half feet high letters. In particular, while many Linux distributions set up the console as framebuffer text mode (which means the graphics card is set to graphical mode and the Linux kernel emulates a text console on it), but this obfu still works in such cases.
  • Re^2: The Oldest Plays the Piano still works (as of 5.16.1). The variants in Re^3: The Oldest Plays the Piano also work.
  • It's not my obfu, but only a slight change in Dollar Plus, so it's no surprise that Re: Dollar Plus still works (as of 5.16.1).
  • Both variants in Japh algebra, GF(128) edition still work (as of 5.16.1).
  • News of current disasters hidden in 1st Monasterians still works (as of 5.16.1).
  • \c*\c!\c0\c( still works (as of perl 5.16.1).
  • Just another unpack hacker still works (as of perl 5.16.1).

This trend is also not specific to the obfu I write. The following section is of course just a selection, but you monks are encouraged to post tales about your broken code in replies: then maybe p5p will listen to us and stop these incompatible changes if they hear enough people complain. (Yes, I'm not completely serious, but this is the obfu section so I don't have to say that, right?))

Replies are listed 'Best First'.
Re: Bitrotten obfuscations
by eyepopslikeamosquito (Bishop) on Oct 22, 2010 at 11:05 UTC

    Saturn still kaleidoscopes, The Earth still spins. All in the solar system is good and as it should be.

    Much to my surprise, Larry Witticisms from perl Errors still works -- from perl 5.005 all the way to perl 5.12. Given that this obfu creates random Larry witticisms based on the precise wording of perl error messages that is a huge and very pleasant surprise. I salute the Perl 5 Porters! Update: It finally broke with perl 5.14 (thanks to ambrus for pointing this out).

Re: Bitrotten obfuscations
by choroba (Archbishop) on Dec 18, 2014 at 13:17 UTC
    3-D Stereogram, Self replicating source. doesn't work in 5.14.4, still works in 5.10.1. Anyone interested can try to bisect the change more accurately.
    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
Re: Bitrotten obfuscations
by awwaiid (Friar) on Jan 21, 2011 at 19:53 UTC
    My JAPH from a while back doesn't work in recent perls... but that's not surprising based on what it uses for it's source data :)

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: obfuscated [id://866594]
Approved by Corion
Front-paged by Arunbear
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2022-07-06 22:45 GMT
Find Nodes?
    Voting Booth?

    No recent polls found