Comments (5)
Original comment posted by [email protected] on 2012-11-02 at 12:39 AM
Something like this should work as a starting point:
/* Match string literals that are not valid syntax for regular expressions. */
Matcher<ExpressionTree> BAD_REGEX_LITERAL = new Matcher<ExpressionTree>() {
public boolean matches(ExpressionTree tree, VisitorState state) {
Object value = ((JCExpression) tree).type.constValue();
return value instanceof String && !isValidSyntax((String) value);
}
private boolean isValidSyntax(String regex) {
try {
Pattern.compile(regex);
return true;
} catch (PatternSyntaxException e) {
return false;
}
}
};
/* Match invocations to String.split() and Pattern.compile() with bad string literals. */
Matcher<MethodInvocationTree> BAD_REGEX_USAGE =
allOf(
anyOf(
methodSelect(isDescendantOfMethod("java.lang.String", "split(java.lang.String)")),
methodSelect(isDescendantOfMethod("java.lang.String", "split(java.lang.String,int)")),
methodSelect(staticMethod("java.util.regex.Pattern", "compile"))),
argument(0, BAD_REGEX_LITERAL));
Untested, but based on similar matchers I'm using for checking valid HTML syntax. I can polish and get it working if this is desirable for error-prone.
from error-prone.
Original comment posted by [email protected] on 2012-11-02 at 02:31 AM
Okay, I've put together http://code.google.com/r/mdempsky-error-prone/source/detail?r=8ab6a57c1df477eb9b9ee582d1790f2629ae18aa&name=regexMatcher to add this as a matcher.
git pull https://code.google.com/r/mdempsky-error-prone regexMatcher
Status:
Labels: -Type-NewCheck, -Priority-Medium
from error-prone.
Original comment posted by [email protected] on 2012-11-02 at 02:38 AM
Oops, didn't mean to change the labels.
Also, amended the commit to fix a nit: http://code.google.com/r/mdempsky-error-prone/source/detail?r=dedc3aed523a78852f6226096750e40c37100055
I suppose I should commit these to branches in the error-prone repo instead though?
Status: Started
Owner: [email protected]
Labels: Type-NewCheck, Priority-Medium
from error-prone.
Original comment posted by [email protected] on 2012-11-02 at 10:45 PM
Now that I have error-prone commit access, I've pushed my change to the mdempsky/regexMatcher branch in error-prone: 2ecef62
PTAL
from error-prone.
Original comment posted by [email protected] on 2012-11-07 at 11:23 PM
I've merged my InvalidPatternSyntax matcher into master.
Status: Fixed
from error-prone.
Related Issues (20)
- Suggest to use `Double.compare` or `Float.compare` when ObjectEqualsForPrimitives is triggered on floating point primitives
- Patching no longer works for experimental checks like StatementSwitchToExpressionSwitch HOT 1
- False UnusedVariable warning for method parameters only used in overridden implementations HOT 3
- FormatStringAnnotation checker is annoyingly stricter than FormatString HOT 2
- Jdk 23 now broken with Error prone after github updates to newer cut yesterday HOT 4
- JDK 23 compatibility HOT 1
- [PatternMatchingInstanceof] False-positives
- Refaster includes fully qualified reference to the `@AfterTemplate` to local variable inside the template HOT 4
- Dspace mvn compilation error HOT 6
- BugPattern: ParameterName HOT 3
- SelfAssignment false positive with casting a float variable to int HOT 1
- An unhandled exception was thrown by the Error Prone static analysis plugin: BugPattern: InconsistentCapitalization HOT 2
- UnnecessaryDefaultInEnumSwitch does not work with enhanced switch statement for cases with multiple values
- False positives by UnusedVariable on unnamed variables (Java 22)
- An unhandled exception was thrown by the Error Prone static analysis plugin. HOT 1
- Allow to defuse `-XepDisableAllChecks` by `-XepEnableAllChecks` if it is present in javacopts later.
- An unhandled exception was thrown by the Error Prone static analysis plugin. [BugPattern: SetUnrecognized] HOT 4
- NPE when updating from 2.29.0 to 2.29.1 HOT 4
- [2.29.1] JPMS Module metadata was removed HOT 4
- YodaCondition crashes on call to "equals(foo)", i.e., without explicit object given HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from error-prone.