So today is "make a terrible comic day"...

Hmm....

:blobcatthinking: Most terrible thing that I can draw

Follow

@vaporeon_ :

@wallhackio C++ rage comic where Vaporeon can't handle C++ sounds fun to draw

Send me some awful C++ constructs for inspiration

@vaporeon_ I don't know what this is doing but it looks evil:

const char* seed = "random seed";
RAND_seed(seed, sizeof(seed));

The following snippet which assigns to an rvalue, something you're not supposed to be able to do:

#include <iostream>
class A{};
int main() {
const A a;
std::cout << &(A() = a) << "\n";
}

using the ternary operator to conditionally change what variable is assigned to:

int main() {
int a;
int b;

// do stuff, also assign to a and b

(a < b ? a : b) = 3;
}

The following is actually valid C++ code:

https://www.google.com

Operator overloading lets you do plenty of absurdities. You could, for example, override <= such that it behaves like a "move assignment":

class A {
public:
int num;

A& operator<=(A& other) {
this->num = other.num;
return *this;
}
};

int main() {
A a;
A a2;

a.num = 1000;

a2 <= a; // move a's content to a2
};

There's certainly more but this is plenty of evil shit.

@wallhackio I think the ternary operator thing is actually super cool :blobcatreach:
It's something that I sometimes wish to do in C, but it's less convenient there, I have to do an if-statement

@wallhackio How is the Google URL valid code? :psyduck:

$ echo https://www.google.com > test.cpp
$ g++ test.cpp
test.cpp:1:1: error: 'https' does not name a type
1 | https://www.google.com
| ^~~~~

@vaporeon_ i must be misremembering what i saw. i'm trying to find it but i can't. for now just forget about that one

@wallhackio Is the RAND_seed thing:

const char* seed = "random seed";
RAND_seed(seed, sizeof(seed));

Is this similar to how you can cat > /dev/random and then write whatever bytes there to seed the randomness pool? NetBSD made me do that on a device that didn't have sufficient hardware to generate randomness on its own...

Though: I thought sizeof(seed) should just return sizeof(const char*) and not the length of the string. Unless this is some extremely cursed C++ thing...

@vaporeon_ you have already put more thought into that hack than i ever have by writing this comment

@wallhackio Where's that RAND_seed macro defined? Is it part of C++ itself or is it part of your code base?

@aescling @wallhackio @vaporeon_ Let's be honest, that's much more correct phrasing than it has any right to be.

@aschmitz @aescling @vaporeon_ today you are my favorite masto user who username's first syllable sounds like "ash"

@wallhackio So the second argument is indeed supposed to be the number of bytes in your arguments (i.e. strlen(seed))... I think the programmer made a mistake here, since sizeof(seed) will just return the size of a const char* on your architecture:

#include <stdio.h>
int main() {
const char* seed = "random seed";
printf("%zu\n", sizeof(seed)); /*will print 8 on 64-bit computer */
}

@vaporeon_ someone in a reddit comment said they actually saw this in their company's production code so even if its wrong, its out in the wild somewhere

@wallhackio So they're really out there seeding their random number generator with the very predictable string "random seed"...? That's really bad...

Sign in to participate in the conversation
📟🐱 GlitchCat

A small, community‐oriented Mastodon‐compatible Fediverse (GlitchSoc) instance managed as a joint venture between the cat and KIBI families.