12 comments

  • tensegrist 2 minutes ago
    note that this seems to be a bug in what i expect (feel free to correct me) is a code path for a little-used codec

    maybe we'll just see them remove support for these long-tail formats the way linux has been removing drivers for similar reasons https://www.phoronix.com/news/Linux-Retiring-Moxa-Driver

    • parl_match 1 minute ago
      it's widely used but in "industry" applications. so ffmpeg is probably being used in a lot of offices (studios) and maybe even being included in end user software.
  • dabinat 3 hours ago
    It’s interesting how AI may both raise and lower the quality of software. It’s very easy to send an AI agent on an open-ended bug hunt, and if it wastes a bunch of time and effort and finds nothing, no big deal. Time is much more important for a human developer with a salary.
    • simonjuk 23 minutes ago
      In my experience, there are two ways to use AI: speed or quality. Speed is where you give the AI a task to do and you review it; quality is where you write the code yourself and you get AI to review it. Both are valid for different situations.
      • merb 2 minutes ago
        My plan for bigger things is mostly:

        Generate multiple solutions- they do not to work 100% correctly. And than I check which I would prefer. Which is more to our applications taste.

        And than I would take the vibe output as a kind of a ‚plan‘ which I use to implement but not follow 100% and at the end I take my solution and review it. I gain speed with that because I often can quickly see the pros and cons of a solution way better than when I would manually do it and hang on a major roadblock and also I even see such roadblocks in the vibe output - it’s mostly the part with an unnecessary amount of new code that looks nonsensical.

    • dmix 3 hours ago
      Finding the bugs with LLMs is easy. Reviewing the output, cleaning it up, and making sure it doesn't break something else is the hard part.
      • black_knight 51 minutes ago
        This is where I believe strong typing (like, Haskell-strong or stronger) and functional programming in general will be a win. The confidence I have that my fixes are localised when fixing Haskell code is infinitely stronger than fixing even Java, not speak about C, code.
        • astrange 41 minutes ago
          Haskell's type system would not easily prevent this bug. It's not good at numeric/logic issues like that. When people say "Haskell makes it impossible to write bugs" they mean "Haskell has enums" (ADTs).
          • _jackdk_ 26 minutes ago
            Liquid Haskell might require you to prove that the divisor is nonzero, but even in standard Haskell there's common idioms for ensuring that a list is non-empty (data NonEmpty a = a :| [a]) or that text is non-empty (newtype NonEmptyText = NonEmptyText Text, with non-exported constructor, helpers like make :: Text -> NonEmptyText, or more advanced tricks like https://exploring-better-ways.bellroy.com/haskell-koan-type-... ).

            The big problem preventing this approach from working for numbers is that it's just so cumbersome there. Most of this is because all the arithmetic operators are bundled into a single Num typeclass, and `fromInteger :: Num a => Integer -> a` has a type that's impossible for a "non-zero number" wrapper to satisfy.

          • black_knight 36 minutes ago
            I am not claiming you cant write buggy code in Haskell! But following good functional style, your bug will more likely be compartmentalised, and fixing it will not break some other part of your program.
        • theLiminator 41 minutes ago
          Imo, formal methods like more expressive/stricter type systems are key to making LLM generated code successful. Of course models will get better, but trusting the output will become much easier with a type system that proves more properties.
        • fouronnes3 42 minutes ago
          What's stronger than Haskell?
          • black_knight 38 minutes ago
            Dependent types is one possible direction. Not sure when a language with dependent types will arise which will be useful for making real programs.

            Agda is the most mature dependently typed programming languae (having been around since the 90s – it is basically Haskell on steroids), but has a more proof-assistant flavor than an actual programming language flavor. Opus & Fable write Agda quite well, so LLMs can understand dependent types.

          • astrange 40 minutes ago
            Anything with ranged numeric types. Like everyone's favorite functional programming language, Ada.
            • ghaslt 30 minutes ago
              This issue raises SIGFPE. Ada would raise Constraint_error, which is easier to catch than a signal, but still occurs at runtime.

              You need range proofs to be 100% safe, and then you can as well use the regular type because invalid values will not occur.

            • black_knight 34 minutes ago
              Or Liquid Haskell.
          • TheGoddessInari 35 minutes ago
            Lean 4, Idris 2.
          • theLiminator 41 minutes ago
            Perhaps coq/agda/idris/etc.
      • nonethewiser 1 hour ago
        No one can keep up with the volume of code AI produces.

        We wont stop using AI.

        We will use AI to check AI.

        Of course this is crazy, but it will also unlock pretty insane scaling and productivity and ultimately we will manage it on either end via requirements and tests.

        • adamddev1 19 minutes ago
          > it will also unlock pretty insane scaling and productivity

          Insane scaling of bloat, bugs, and technical debt I'd say.

          > We will manage it on either end via requirements and tests

          It is so crazy that this is being touted as a sane strategy. When I was a much worse programmer, I tried to write a big complicated string manipulation function to take two types of scripts in a language and add diacritics. I had the requirements very clear. I had the tests very clearly with all the edge cases. But I didn't have a good and clear picture of how to attack the problem which was quite novel for me. As I got closer to passing all the tests it got exponentially more unruly and confusing. And nearing the end I was frantically changing little bits here and there wincing and praying and hoping the tests would pass. "Please work! Come on!" Then when I got close enough, I could never ever think about touching that mess again.

          I was a below average programmer then throwing myself at some novel problem I didn't understand. Throwing LLMs that produce below average code at novel problems and relying on tests and requirements is not where we want to go to make real progress.

          (Years later after much learning and coding myself I was able to redo the function in a totally different way. This time I actually understood how to attack the strange problem and made something clean, clear, and robust that just worked. The tests then become a secondary guardrail, not the main force of correction.)

          We are seeing such a massive regression from what we've learned over the years of CS.

          • shiandow 7 minutes ago
            I think all code is technical debt in a way. Good code is a necessary evil, bad code is more evil than necessary.

            Generating code automatically when you're not even quite sure what it is or even should be doing is insanity.

        • harambae 1 hour ago
          It's mostly (not entirely, but mostly) finding security issues in old human-written code. It'll eventually start running out of those.

          From that standpoint, it's not a crazy setup security-wise. Maybe still crazy for development.

          • stefan_ 1 hour ago
            You can point AI at any AI produced code and ask it to review it, get back 10 bullet points and a few pages of prose. And the fun part is, you can do that over and over and over again!
            • bilalq 33 minutes ago
              This happens all the time. Yesterday, I ran into an especially egregious case.

              I had Fable add a new subcommand to our internal CLI tool. I reviewed and tested it locally and had to suggest several fixes that I feel like I wouldn't have had to tell a human senior engineer to do. When it finally submitted the PR, I had it on a loop waiting a few minutes for comments on the PR, then assessing/addressing/replying-to/resolving them, and then repeating again until all AI reviewers were okay with it. It ended up going through dozens of revisions and ended up with 160 comments left on the PR.

        • krona 1 hour ago
          You're suggesting that LLMs get better at fixing bugs/vulnerabilities, but at the same time stop getting better at finding them? What if this difference is inherent and essential?
          • TacticalCoder 1 hour ago
            > You're suggesting that LLMs get better at fixing bugs/vulnerabilities, but at the same time stop getting better at finding them?

            Are you implying that all code writing by LLMs atm is bug-free?

            • krona 1 minute ago
              Absolutely not. By most accounts they're terrible at fixing anything other than trivial bugs in complex codebases e.g. Linux kernel, but they're much better at finding them.
        • CPLX 38 minutes ago
          In fairness at root this has been going on for awhile. No one can keep up with the volume of machine code that modern more abstracted codebases produce.

          We didn't stop using syntactic programming languages we used code to check code.

          Not sure it's really crazy at all. It's been an abstraction for programmers probably since we stopped soldering transistors to each other.

      • hombre_fatal 1 hour ago
        The missing part of this is that verifying the bug with LLMs is also easy, and so is adversarially reviewing the proposed fix with LLMs.

        The only thing left for you to do should be directional decisions. The LLMs should pause and rope you in if the fix involves directional/invariant changes.

      • bewareofscams 2 hours ago
        [flagged]
        • shevy-java 2 hours ago
          > LLMs do find bugs, do save time

          They find bugs but whether they save time is nowhere near as clear as you try to insinuate here.

          • pixl97 2 hours ago
            They save time in finding bugs.
            • owebmaster 53 minutes ago
              Unless it's finding a bug it added then it's time wasted x2
            • lukan 2 hours ago
              And for me they also save time in fixing bugs.
    • evenhash 2 hours ago
      > It’s very easy to send an AI agent on an open-ended bug hunt, and if it wastes a bunch of time and effort and finds nothing, no big deal.

      No big deal? It’s not like it’s free… tokens cost money.

      • rogerrogerr 1 hour ago
        Often rounds to free compared to human costs.
    • Supermancho 3 hours ago
      I don't care if you call it an over-engineered looping machine or what, there are concrete benefits to using LLMs for this. They work faster than developing your own looping algorithm and more often produce useful results than not.
      • saghm 1 hour ago
        It's not even like fuzzers are valuable because of the process they use specifically either; the value is that they produce a concrete input that you can use as a reproducible test case at that point. The value could be produced by gazing into a crystal ball for all I care, as long as I can use what it gives me to reproduce a bug.
    • shevy-java 2 hours ago
      I dislike AI, but if AI finds real bugs then this is in my opinion objectively a positive thing. Of course the question is what constitutes a real bug.
      • pixl97 2 hours ago
        Unfiltered models will help build exploits for the bugs they find, so there is some means of measuring their efficacy.
        • klipt 1 hour ago
          If you're just talking about security bugs.

          There are also non security bugs that don't have exploits but just make the user experience worse.

      • hn_submit 1 hour ago
        A.I. is useful for this. But it would be even more useful if all new code were written in Rust or some other memory-safe language.

        A.I. could also be used to port C/C++ codebases to Rust, which isn't economically feasible at the moment.

        • senderista 1 hour ago
          AI will have plenty of security bugs left to find in Rust codebases.
        • Spivak 1 hour ago
          I mean I get the sentiment but Rust won't save you against division by zero, it'll just panic at runtime like every other language.
    • eviks 3 hours ago
      But what's your expectation of the net?
  • ks2048 2 hours ago
    No doubt fuzzers (vibecoded or otherwise) can be powerful, but can't you just mark all "/" as potential divide by zero errors?

    I guess sometimes developers think they "know" some variable won't be zero, but unless it checked explicitly or by the compiler, that shouldn't be trusted.

    • Someone 1 hour ago
      > but can't you just mark all "/" as potential divide by zero errors?

      If you’re accepting large false positives rates: yes.

      If you want users to take your warnings serious: no.

      (Nitpick: you certainly don’t want to flag _all_ of them. Divisions by non-zero constants definitely should be excluded, for example (integer division by -1 can lead to overflow, but that would be a different warning))

    • saghm 1 hour ago
      Fuzzers find inputs, not just "potential" errors that aren't triggerable.
    • MaxBarraclough 30 minutes ago
      If it's possible for program execution with some particular input to lead to a divide-by-zero, that's a bug, especially if the program is expected to be able to handle malformed inputs, or perhaps even deliberately malicious ones. It's not trivial to determine whether a program does this correctly. If it was, program analysis would be easy.

      Division can 'go wrong' for certain inputs, but it's not just division. In C, signed integer addition, subtraction, and multiplication, all give undefined behaviour on overflow.

      As 'Someone' already pointed out, it's not helpful to just flag all uses of the division operator, or of other potentially dangerous operators. Minimising false positives is one of the core challenges of program analysis.

    • dooglius 2 hours ago
      What are you suggesting and how would it be different than how SIGFPE already works?
    • wvbdmp 2 hours ago
      I mean there could be a guard clause? But yeah, seems like this could be statically evaluated like how some IDEs see a null check and don’t complain about nullability within the same scope.
  • souvlakee 1 hour ago
    It is interesting that FFmpeg has its own Git server. Maybe we should move there too?
    • snailmailman 1 hour ago
      Lots of projects run their own git or forgejo or similar. I run my own private forge, and it has a higher uptime than GitHub. (A shockingly low bar, tbh)

      It’s surprisingly simple to setup, and the hardware requirements are pretty small for a private or small forge, as it’s usually a relatively small number of users/repos/etc.

    • TacticalCoder 1 hour ago
      > It is interesting that FFmpeg has its own Git server. Maybe we should move there too?

      Git is a DVCS. I know many people only ever used Git through Github and forgot what the 'D' in DVCS means but whether or not they remember what the 'D' stands for, running your own Git server is trivial. Especially in this day and age of LLMs were you can just ask: "Clone this repo and convert it to base Git repo and serve it on the LAN PLZ KTHX".

      The result is going to be more stable than Github and, arguably, more secure too.

  • robertlagrant 1 hour ago
    What we need is a numeric type that cannot be zero.
    • winwang 1 hour ago
      Every day, we stray closer to Haskell. Dare I say it: good!
    • roadbuster 45 minutes ago
      The only way to achieve this is to either put a runtime software check on a variable whenever it's assigned/used, or to literally add hardware support in processors themselves which literally throws an interrupt when a "neverShallBeZero" variable is assigned to zero.

      There's no viable way to statically prove at compile-time that these variables will never become zero at runtime, ultimately forcing a system of endless runtime checks (be it software or hardware)... which is why processors already throw exception interrupts when division by zero is attempted.

      • colechristensen 4 minutes ago
        You're kind of saying the only way to do it is in software or hardware :)

        An alternative https://en.wikipedia.org/wiki/Projectively_extended_real_lin...

        The projectively extended real line defines division by zero, no reason you couldn't have a floating point type that implemented it.

        >There's no viable way to statically prove at compile-time that these variables will never become zero at runtime

        strongly typed programming languages like Ada allow for types which have ranges such as disallowing zero -- but also any arbitrary thing like you can create a floating point "degrees" type which is [0.0, 360.0] or any other ranged type

    • drdaeman 1 hour ago
      What we need are refinement types, where there’s a base type and a predicate. F* has this:

           val (/) : int -> (divisor:int { divisor <> 0 }) -> int
    • yeputons 1 hour ago
      And also cannot be INT_MIN, otherwise -1 / INT_MIN is undefined behaviour(!) in C and C++.
    • rhdunn 1 hour ago
      It would be more flexible for a compiler to reuse the range analysis logic used in optimizations for statically verifiable divide by zeros. That way you could extend it to other things like statically verifiable overflows.
    • duped 49 minutes ago
      For stuff like niche value optimization sure. For practical arithmetic code, nah. Like with this bug, all that changed is that garbage data in gives the user an error that they tried to process garbage data. Adding a new type doesn't make the code better, it just moves the error around. And you really don't want an infix division operator to fail to type check if the right hand side isn't a nonzero type, do you?
  • 12j3afAv 2 hours ago
    Generating an incorrect input file seems to be the easiest task of all for any fuzzer.

    Generating correct input to get deep into the call stack and then finding something is the hard part.

  • jeffbee 44 minutes ago
    I imagine the discussion will center around this application of AI, but to me this is just the Nth proof of the proven fact that you must build ffmpeg, if you insist on using it, with only an allow-list of file formats that you expect to encounter, and not with the kitchen sink of stuff you are never going to need.
  • Surac 2 hours ago
    send patches
    • rs_rs_rs_rs_rs 2 hours ago
      ...they did.
      • ligarota 2 hours ago
        Where?

        They only suggested a basic guard, chich can be useless if this case never happens

  • akshay_akula 2 hours ago
    [flagged]
    • wy35 1 hour ago
      Unrelated to the submitted link -- just checked your comment history and all of your comments are AI-generated like this one. What's the motivation for this?
      • f311a 1 hour ago
        He won’t reply, he’s busy promoting himself and his peojects with AI.
      • bigfishrunning 1 hour ago
        probably karma farming
  • whatsThisBtn4 55 minutes ago
    But guys... AI is bad. It might have done good stuff today, but we should be anti data. The Chinese propagandists on United States social media told me to.
  • VCFundedGenYer 2 hours ago
    The fruits of using LLMs to code. You'll waste far more time finding what it quietly and subtly wrecked than you would have if you just coded it yourself.
    • jaggederest 2 hours ago
      Those sneaky LLMs going 7 years into the past and committing as a human:

      https://code.ffmpeg.org/FFmpeg/FFmpeg/commit/8eda3c7f91e1a5b...

      • wiseowise 2 hours ago
        It’s obviously Claude 69 with time travel functionality, that’s too dangerous to release to public. They’re working on space-time limiting sandbox to prevent these issues.
        • six_seven 1 hour ago
          Its all fun and games until the Claude-who-remains hunts you down
        • jaggederest 1 hour ago
          Just remember kids, never immanentize the eschaton.
    • vegnus 2 hours ago
      You're not reading it right. The bug was found using a vibecoded fuzzer.
  • cpriest 57 minutes ago
    Nice find. The interesting part isn't "AI wrote the fuzzer." It's that a cheap random harness still hits classical bugs in ancient parsers. Keep the corpus; throw away the hype.