3 ms·
I checked it out; it's as broken as these childish acts from "reputable" javascript-library maintainers. cat foo.js; jsmin <foo.js "foo" && !"foo"
by thezilch 15y ago
I checked it out; it's as broken as these childish acts from "reputable" javascript-library maintainers.
cat foo.js; jsmin <foo.js
"foo" &&
!"foo"
"foo"&&;!"foo"
- palish 15y agoI have a simple fix. Standby. EDIT: Fixed. Thanks for pointing that out. Let me know if you find anything else.
- thezilch 15y agoSure thing; still some edges -- not limited to the following. cat foo.js; jsmin <foo.js var foo = "foo", is_foo = foo? !!foo: "bar"; var foo="foo",is_foo=foo?;!!foo:"bar";
- palish 15y agoFixed. Thank you, keep 'em coming. As of now, semicolon substitution isn't performed if the character before the newline is any of: & | + - * ? :
- thezilch 15y agoLike I said, not limited; surely you can see where these are going... cat foo.js; jsmin <foo.js foo = [ !"foo", !"foo" % !!"bar", 1 == !"foo" ]; foo=[;!"foo",;!"foo"%;!!"bar",1==;!"foo"];
- palish 15y agoFixed. Thanks so much! I added % and = to the blacklist. I'm searching for a fundamentally elegant solution. My current one is more of a kludge... though, if it fixes all cases and doesn't introduce problems, then maybe it's worth a few extra lines.
- thezilch 15y agoThe last example demonstrated more than the % and = punctuators failing your lexer, and then it doesn't demonstrate still more that would remain, including but not limited to... cat foo.js; jsmin <foo.js while( !true){true;} while(;!true){true;} You might look through the token(izing) section of the ECMA's spec, specifically puctuators. http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf http://www.ecma-international.org/publications/files/ECMA-ST...
- palish 15y agoThe "prior character blacklist" is now: & | + - * ? : % = ( [ { , Currently hunting for more problems, and a more elegant solution... Offtopic, the reason I did this JSMin fork was just to challenge myself, not to make a political statement or anything like that. My cat was just diagnosed with feline lukemia. I know this project is a little silly, but it's been fantastic for keeping my mind off of real-world stuff. You're awesome for providing all of these examples; thank you. More usefully, this serves to prove that Mr. Crockford was likely correct in his assessment.
- thezilch 15y agoAlso, consider non-punctuator issues; such as those with exposed reserved-keywords. cat foo.js; jsmin <foo.js do !!1 && 2 while(0) do;!!1&&2 while(0)
- palish 15y agoHeh heh. You may have just found a fatal flaw. On the other hand, is "do" the only reserved keyword which matters? Then it might be okay to special case that one instance as well. There is no doubt that my approach is the wrong approach; I'm just curious whether it's easier to handle each of the ~dozen special cases than to fundamentally rewrite JSMin (as a full ECMAScript parser). EDIT: Amusingly, I've special-cased the 'do' keyword in a fairly straightforward way, so now the code handles every example thus far. I wonder if these are the only special cases required, and whether they add any adverse side-effects. Also, you're extremely talented and creative.
- deleted 15y ago[deleted]