• Codex@lemmy.world
      link
      fedilink
      arrow-up
      5
      ·
      8 months ago

      Makes the error a little too frequent, but does obscure any performance penalty and is some truly evil genius work!

    • IphtashuFitz@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      8 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…

        • IphtashuFitz@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          8 months ago

          It was pure c code that was used to print reports, and included the date in a header. Whoever wrote it miscalculated the size of the buffer for the header by one byte. When the date was the longest month & day spelled out plus a two digit day of the month then it would overflow the buffer, resulting in the program crashing.

      • yggdar@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        8 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.

        The original version is also super likely to be actually true. This version would be false very often. You could reduce the likelihood by increasing the 10, but you can’t make it too high or it will never be triggered.

        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)
        
          • yggdar@lemmy.world
            link
            fedilink
            arrow-up
            2
            ·
            8 months ago

            That is true, but from a human perspective it can still seem non-deterministic! The behaviour of the program as a whole will be deterministic, if all inputs are always the same, in the same order, and without multithreading. On the other hand, a specific function call that is executed multiple times with the same input may occasionally give a different result.

            Most programs also have input that changes between executions. Hence you may get the same input record, but at a different place in the execution. Thus you can get a different result for the same record as well.

  • SkyNTP@lemmy.ml
    link
    fedilink
    arrow-up
    6
    ·
    8 months ago

    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.

    • maynarkh@feddit.nl
      link
      fedilink
      arrow-up
      8
      arrow-down
      1
      ·
      8 months ago

      It’s bold to assume those exist. Maybe there’s a reason the coworker left

    • frezik@midwest.social
      link
      fedilink
      arrow-up
      1
      ·
      8 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.

      • sunbeam60@lemmy.one
        link
        fedilink
        arrow-up
        0
        ·
        8 months ago

        Yeah but even a single automated test would catch it and reject the PR. You just need a single test.

        • frezik@midwest.social
          link
          fedilink
          arrow-up
          1
          ·
          8 months ago

          No, you can’t assume that. The probability of hitting the condition each time is low. If there aren’t very many calls that hit this, it could easily slip through. Especially on 64-bit int platforms.

  • Awkwardparticle@programming.dev
    link
    fedilink
    arrow-up
    2
    ·
    8 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.

    • Cosmic Cleric@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      8 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.

  • seth@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    8 months ago

    This is more evil than changing someone’s SSMS batch separator from GO to FROM or JOIN.

  • Dizzy Devil Ducky@lemm.ee
    link
    fedilink
    English
    arrow-up
    0
    ·
    8 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.

    • AAA@feddit.de
      link
      fedilink
      arrow-up
      2
      ·
      8 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.

    • philm@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      8 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.

    • deur@feddit.nl
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      8 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.

      Pro tip, you seem really arrogant (including some other comments) and you need to tone that down before you enter the industry. Its nothing to be ashamed of and I’m not trying to insult you, you just assume your experiences are way more universally valid than they are.

    • Gollum@feddit.deOP
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      8 months ago

      The C standard library function int rand(void) returns a pseudo random integer between 0 and RAND_MAX (which should be at least 2^15, depending on the actual implementation).

      Depending on the distribution of the pseudo random numbers, it will be true for over > 99% of its applications.

      Source: trust me bro, and C++ reference

      Furthermore, there is no integer between 0 and 1, but I guess you mean a real number between 0 and 1.

    • Xyre@lemmus.org
      link
      fedilink
      English
      arrow-up
      1
      ·
      8 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.

    • lhamil64@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      8 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”