4 ms·
You're assuming there would even be an array of callbacks if the code had been written in a different language, rather than the other language offering some nic
by XCabbage 8y ago
You're assuming there would even be an array of callbacks if the code had been written in a different language, rather than the other language offering some nicer abstraction that eliminated the array. Having not seen the code, I can't be sure of this, but I know that, for instance, I rarely need to write array index arithmetic in the languages I usually work with (Python, JavaScript) whereas on the occasions I've dabbled with C such arithmetic came up constantly. If I introduced a nasty bug in some C code due to an array arithmetic error, arguing "Python wouldn't be any better because it doesn't do anything to make manually writing array index manipulations easier" would be missing the point.
- vbezhenar 8y agoArray of callbacks (or long switch which is essentially the same) is a standard method to implement state machine.
- kaoD 8y agoAnd that's why you should use a thoroughly tested implementation instead of implementing a bug-ridden ad-hoc square wheel. "Whoopsies, I forgot to ban some state transitions" won't happen if all you're writing is a state machine spec, and not a state machine spec and its ad-hoc implementation. Don't roll your own crypto? Extend it to "don't roll your own low-level constructs".
- ernst_klim 8y agoYou can use type system to ensure that there are no wrong state transitions, e.g. you could transit to another state only if you are authorized.
- empath75 8y agohttps://github.com/paramiko/paramiko/issues/1283 https://github.com/paramiko/paramiko/issues/1283 Same bug in python ssh library.
- syn0byte 8y agoA perfect example of why "use safe languages! C is the root of all RCE!" makes me immediately weary of a developer. Had the original poster been the author of such a library, he wouldn't have been motivated to spent much or any time investigating his implementation because he used a safe language.
- kevin_b_er 8y agoSame issue and might even explain it better: They took the client-side implementation and effective state machine, flipped it around, and called it good.