This wouldn’t pass PR review and automated tests, unless they were a senior dev and used elevated privileges to mess with things behind the scenes.
Me after I got fired
Submitted 9 months ago by genfood@feddit.de to programmer_humor@programming.dev
https://feddit.de/pictrs/image/92916725-c99e-4131-a36a-adb679886d0c.jpeg
Comments
SkyNTP@lemmy.ml 9 months ago
maynarkh@feddit.nl 9 months ago
It’s bold to assume those exist. Maybe there’s a reason the coworker left
Hazzia@discuss.tchncs.de 9 months ago
Can confirm, just left a team that had 3 people for 4 pieces of legacy software and still used subversion
frezik@midwest.social 9 months ago
rand()
will be infrequent< 10
(at least ten in 2^15 times, if not exponentially more), so automated tests are likely to pass. If they don’t, they’re likely to pass on the second try, and then everyone shrugs and continues. If it’s buried in 500 other lines, then it’s likely the code reviewer will give it all a quick scan and say “it’s fine”. It’s the three line diffs that get lots of scrutiny.In other words, you seem to have a lot more faith in the process than I do.
killeronthecorner@lemmy.world 9 months ago
rand will be called every time true is used, which could be hundreds of times for all we know
steal_your_face@lemmy.ml 9 months ago
Write a 5 like PR and receive 5 comments. Write a 500 line PR and receive no comments.
autokludge@programming.dev 9 months ago
lgtm
grandkaiser@lemmy.world 9 months ago
Attn: security team
Hi,
I think someone on Lemmy has hacked into every work environment I’ve ever coded in
nephs@lemmygrad.ml 9 months ago
It works on my machine, most of the time.
PrettyFlyForAFatGuy@lemmy.ml 9 months ago
you’d be surprised what slips through review
sunbeam60@lemmy.one 9 months ago
Yeah but even a single automated test would catch it and reject the PR. You just need a single test.
victorz@lemmy.world 9 months ago
Funny but I call bullshit all day
qarbone@lemmy.world 9 months ago
Yeah, how did they commit this to anywhere that would hurt?
victorz@lemmy.world 9 months ago
They did not ✌️
Thcdenton@lemmy.world 9 months ago
That happend 🙄
LastYearsPumpkin@feddit.ch 9 months ago
But rand() is a number between 0-1, so it will never be >10
Basically this is just #define True = False
genfood@feddit.de 9 months ago
The C standard library function rand(void) returns a random integer between 0 and RAND_MAX (which should be at least 2^15, depending on the actual implementation).
ook_the_librarian@lemmy.world 9 months ago
You’re correct in a lot of languages; Excel comes to mind. Just that’s not how
int rand()
works in C.Sorry, I don’t why you’re getting snark and even being accused of using the word “integer”.
Xyre@lemmus.org 9 months ago
I’m not sure what’s worse. The engineer that thought this would work or the company that doesn’t do code reviews.
perviouslyiner@lemmy.world 9 months ago
Pit it in a package they depend on - nobody reviews those
mvirts@lemmy.world 9 months ago
Lol I don’t think the preprocessor would be too happy with a space after #
nabladabla@sopuli.xyz 9 months ago
C preprocessor wouldn’t care about it
mvirts@lemmy.world 9 months ago
Lol that’s news to me!!
AceFuzzLord@lemm.ee 9 months ago
I hope I learn some day how to code a bug in python that will not show up in any error messages and absolutely ruins a program. I’d love to find a random program at whatever job I end up at and before quitting just ruin it with a random line of code that doesn’t output an error code.
deur@feddit.nl 9 months ago
What the hell? Thats not funny or anything it just fucks with your ex-coworkers who probably werent the problem, management isnt affected by that.
philm@programming.dev 9 months ago
Easy, it’s just… continue programming in python. (large codebases are a mess in python…)
More seriously: Don’t do that, it’ll only create headaches for your fellow colleagues and will not really hit those (hard) that likely deserve this.
MotoAsh@lemmy.world 9 months ago
Logical errors are an entire domain of programmer troubleshooting. All you’ll have to do is attempt to learn programming, and you WILL write something that throws no errors and confuses you for hours.
We all do. It’s almost a badge of honor to push past a few of them.
stembolts@programming.dev 9 months ago
It’s not hard to do. What would be hard would be getting it through code review. Like the example provided… how would that ever get through code review for a merge? Must not be a well-protected code base?
maynarkh@feddit.nl 9 months ago
Publish your own package to PyPI that on import does some evil stuff. Name the package something similar to a known, but not too well known package. Supply chain attacks are even less defended against than other stuff.
All this relies on companies being shit though, but well, we all know that’s the case in a lot of places.
lseif@sopuli.xyz 9 months ago
learn C and u will get undefined behaviour for free :)
Stumblinbear@pawb.social 9 months ago
That’s just called malware
AAA@feddit.de 9 months ago
If you’re thinking about rage quitting a job you don’t even have yet, maybe take a different career from the beginning?
What the hell.
PoolloverNathan@programming.dev 9 months ago
import os os._exit()
seth@lemmy.world 9 months ago
This is more evil than changing someone’s SSMS batch seperator from GO to FROM or JOIN.
Awkwardparticle@programming.dev 9 months ago
A lot of you have a lot of faith in people reviewing PRs. I know a few Sr. developers, that if shit was too busy, would skim it and say 'fuck it, it will be QAs problem. If you put this in the correct sub-system in file that would only be executed once a month, for example a maintenance class, It would be really hard to notice something is wrong if it didn’t cause issues seen immediately. Maybe this is the story of an intern that added something that also fucked up boolean comparisons in a subsystem used once a month. Where there is a 2 week lag between the execution and operations noticing something wrong.
CosmicCleric@lemmy.world 9 months ago
{devs} would skim it and say 'fuck it, it will be QAs problem.
And then delays until code complete would eat up all of QA’s time so they have no real time left to test before app release into production.
EmperorHenry@discuss.tchncs.de 9 months ago
Is this some simple line of code that just shuffles everything around in file storage areas?
lhamil64@programming.dev 9 months ago
This looks like a C macro. Basically what it does is replaces the word “true” in the code with (rand() > 10). The rand() function will return a random number from 0 to 32767. So (rand() > 10) will very likely return “true” but not always.
So say you have some code like this: if (someVar == true) { // Do stuff } It would replace “true” with code that usually evaluates to “true” but not always. So every so often your code would just do the wrong thing but it would be hard to debug because it would be rare.
Granted, in that example you probably would just write “if (someVar)” making this moot, but there are more realistic cases where you’d use the constant “true”
TwilightKiddy@programming.dev 9 months ago
rand()
generates a number from 0 to a constant defined in stdlib, which usually corresponds to the architechture of your compiler. So, for 32 bit systems (assuming all the software in the line is 32 bit, too) it will be 2^31-1 = 2 147 483 647, as 1 bit in integers is reserved for negative numbers and 1 number is 0.Though, by design it is guaranteed to be at least 32767, which is a value for 16 bit integers.
ransomwarelettuce@lemmy.world 9 months ago
That’s easy to find, now gremlins is a proper way to quit, but even then it would be easy to fix with hit by reverting a commit.
tkk13909@sopuli.xyz 9 months ago
That’s why you gotta slip it in with a very large commit so they don’t know what they’re looking for and don’t want to revert the changes.
lseif@sopuli.xyz 9 months ago
or somehow commit it a year prior to leaving, and add a
current_time > when_i_leave
perviouslyiner@lemmy.world 9 months ago
define it as LINE % 10 so that the problem goes away when you add a debug statement
CodexArcanum@lemmy.world 9 months ago
Makes the error a little too frequent, but does obscure any performance penalty and is some truly evil genius work!
perviouslyiner@lemmy.world 9 months ago
Image
Mad_Punda@feddit.de 9 months ago
Or just both
Prunebutt@slrpnk.net 9 months ago
Can someone ELI5 what this does?
yggdar@lemmy.world 9 months ago
That exact version will end up making “true” false any time it appears on a line number that is divisible by 10.
During the compilation, “true” would be replaced by that statement and within the statement, “LINE” would be replaced by the line number of the current line. So at runtime, you end up witb the line number modulo 10 (%10). In C, something is true if its value is not 0. So for e.g., lines 4, 17, 116, 39, it ends up being true. For line numbers that can be divided by 10, the result is zero, and thus false.
In reality the compiler would optimise that modulo operation away and pre-calculate the result during compilation.
The original version constantly behaves differently at runtime, this version would always give the same result… Unless you change any line and recompile.
One downside compared to the original version is that the value of “true” can be 10 different things (anything between 0 and 9), so you would get a lot more weird behaviour since “1 == true” would not always be true.
A slightly more consistent version would be
((__LINE__ % 10) > 0)
tunawasherepoo@iusearchlinux.fyi 9 months ago
__LINE__
returns the line of code its on, and% 10
means “remainder 10.” Examples:In code,
0
meansfalse
and1
(and2
,3
,4
, …) meanstrue
.So, if on line 10, you say:
then it will expand to:
if you add a line before it, so that the code moves to line 11, then suddenly it works:
BaumGeist@lemmy.ml 9 months ago
A lot of these replies have high hopes for 5 year olds
ImplyingImplications@lemmy.ca 9 months ago
LINE is a preprocessor macro. It will be replaced with the line number it is written on when the code is compiled. Macros aren’t processed when debugging. So the code will be skipped during debug but appear in the compiled program, meaning the program will work fine during debug but occasionally not work after compile.
“LINE % 10” returns 0 if the line number is divisible by 10 and non-zero if not. 0 is considered false and non-zero is considered true.
#define is also macro. In this case, it will replace all instances of “true” with something that will only sometimes evaluate to true when the program is compiled.
AdlachGyfiawn@lemmygrad.ml 9 months ago
Every tenth line, this would evaluate to False, while on lines that aren’t multiples of ten, it would evaluate to True.
IphtashuFitz@lemmy.world 9 months ago
Decades ago I had to debug a random crash. It only happened on Wednesdays. On Wednesdays in September. On Wednesdays in September after the 10th…
perviouslyiner@lemmy.world 9 months ago
only when your coordinates were within a train depot in Poland?
www.youtube.com/watch?v=XrlrbfGZo2k