* need to know when a string is obviously not a URI.
*/
static boolean isBasicallyValidURI(String uri) {
-
if (uri == null || uri.indexOf(' ') >= 0 || uri.indexOf('\n') >= 0) {
return false;
}
- int period = uri.indexOf('.');
// Look for period in a domain but followed by at least a two-char TLD
- return period < uri.length() - 2 && (period >= 0 || uri.indexOf(':') >= 0);
+ // Forget strings that don't have a valid-looking protocol
+ int period = uri.indexOf('.');
+ if (period >= uri.length() - 2) {
+ return false;
+ }
+ int colon = uri.indexOf(':');
+ if (period < 0 && colon < 0) {
+ return false;
+ }
+ if (colon >= 0) {
+ if (period < 0 || period > colon) {
+ // colon ends the protocol
+ for (int i = 0; i < colon; i++) {
+ char c = uri.charAt(i);
+ if ((c < 'a' || c > 'z') && (c < 'A' || c > 'Z')) {
+ return false;
+ }
+ }
+ } else {
+ // colon starts the port; crudely look for at least two numbers
+ if (colon >= uri.length() - 2) {
+ return false;
+ }
+ for (int i = colon + 1; i < colon + 3; i++) {
+ char c = uri.charAt(i);
+ if (c < '0' || c > '9') {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
}
}
\ No newline at end of file
String note) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.ADDRESSBOOK, result.getType());
+ assertSame(ParsedResultType.ADDRESSBOOK, result.getType());
AddressBookParsedResult addressResult = (AddressBookParsedResult) result;
assertEquals(title, addressResult.getTitle());
assertTrue(Arrays.equals(names, addressResult.getNames()));
String attendee) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.CALENDAR, result.getType());
+ assertSame(ParsedResultType.CALENDAR, result.getType());
CalendarParsedResult calResult = (CalendarParsedResult) result;
assertEquals(title, calResult.getTitle());
assertEquals(summary, calResult.getSummary());
private static void doTest(String contents, String email, String subject, String body) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.EMAIL_ADDRESS, result.getType());
+ assertSame(ParsedResultType.EMAIL_ADDRESS, result.getType());
EmailAddressParsedResult emailResult = (EmailAddressParsedResult) result;
assertEquals(email, emailResult.getEmailAddress());
assertEquals("mailto:" + email, emailResult.getMailtoURI());
private static void doTest(String contents, double latitude, double longitude, double altitude) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.GEO, result.getType());
+ assertSame(ParsedResultType.GEO, result.getType());
GeoParsedResult geoResult = (GeoParsedResult) result;
assertEquals(latitude, geoResult.getLatitude());
assertEquals(longitude, geoResult.getLongitude());
private static void doTest(String contents) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.EAN_13);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.ISBN, result.getType());
+ assertSame(ParsedResultType.ISBN, result.getType());
ISBNParsedResult isbnResult = (ISBNParsedResult) result;
assertEquals(contents, isbnResult.getISBN());
}
Result fakeResult = new Result(contents, null, null, format);
ParsedResult result = ResultParser.parseResult(fakeResult);
assertNotNull(result);
- assertEquals(type, result.getType());
+ assertSame(type, result.getType());
String displayResult = result.getDisplayResult();
- assertTrue("Expected:\n" + goldenResult + "\nbut got:\n" + displayResult,
- goldenResult.equals(displayResult));
+ assertEquals(goldenResult, displayResult);
}
- /*
- private static void doTestResult(byte[] rawBytes, ParsedResultType type) {
- Result fakeResult = new Result(null, rawBytes, null, null);
- ParsedResult result = ResultParser.parseResult(fakeResult);
- assertNotNull(result);
- assertEquals(type, result.getType());
- }
- */
-
}
\ No newline at end of file
private static void doTest(String contents, String normalized, BarcodeFormat format) {
Result fakeResult = new Result(contents, null, null, format);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.PRODUCT, result.getType());
+ assertSame(ParsedResultType.PRODUCT, result.getType());
ProductParsedResult productResult = (ProductParsedResult) result;
assertEquals(contents, productResult.getProductID());
assertEquals(normalized, productResult.getNormalizedProductID());
private static void doTest(String contents, String number, String subject, String body, String via) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.SMS, result.getType());
+ assertSame(ParsedResultType.SMS, result.getType());
SMSParsedResult smsResult = (SMSParsedResult) result;
assertEquals(number, smsResult.getNumber());
assertEquals(subject, smsResult.getSubject());
private static void doTest(String contents, String number, String title) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.TEL, result.getType());
+ assertSame(ParsedResultType.TEL, result.getType());
TelParsedResult telResult = (TelParsedResult) result;
assertEquals(number, telResult.getNumber());
assertEquals(title, telResult.getTitle());
doTest("urlto:foo:bar.com", "http://bar.com", "foo");
}
+ public void testGarbage() {
+ String text = "Da65cV1g^>%^f0bAbPn1CJB6lV7ZY8hs0Sm:DXU0cd]GyEeWBz8]bUHLB";
+ Result fakeResult = new Result(text, null, null, BarcodeFormat.QR_CODE);
+ ParsedResult result = ResultParser.parseResult(fakeResult);
+ assertSame(ParsedResultType.TEXT, result.getType());
+ assertEquals(text, result.getDisplayResult());
+ }
+
public void testIsPossiblyMalicious() {
doTestIsPossiblyMalicious("http://google.com", false);
doTestIsPossiblyMalicious("http://google.com@evil.com", true);
private static void doTest(String contents, String uri, String title) {
Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
- assertEquals(ParsedResultType.URI, result.getType());
+ assertSame(ParsedResultType.URI, result.getType());
URIParsedResult uriResult = (URIParsedResult) result;
assertEquals(uri, uriResult.getURI());
assertEquals(title, uriResult.getTitle());