]> source.dussan.org Git - vaadin-framework.git/commitdiff
#4491 safer browser version detection
authorHenri Sara <henri.sara@itmill.com>
Wed, 7 Apr 2010 10:59:53 +0000 (10:59 +0000)
committerHenri Sara <henri.sara@itmill.com>
Wed, 7 Apr 2010 10:59:53 +0000 (10:59 +0000)
svn changeset:12352/svn branch:6.3

src/com/vaadin/terminal/gwt/client/VBrowserDetails.java

index ea2a70983043cb6956342ee18fb26646f6765b2d..49eda4c072c2afd0954a08596bdea3a8daafe8c4 100644 (file)
@@ -67,18 +67,18 @@ public class VBrowserDetails implements Serializable {
         if (isIE) {\r
             String ieVersionString = userAgent.substring(userAgent\r
                     .indexOf("msie ") + 5);\r
-            ieVersionString = ieVersionString.substring(0, ieVersionString\r
+            ieVersionString = safeSubstring(ieVersionString, 0, ieVersionString\r
                     .indexOf(";"));\r
             parseVersionString(ieVersionString);\r
         } else if (isFirefox) {\r
             int i = userAgent.indexOf(" firefox/") + 9;\r
-            parseVersionString(userAgent.substring(i, i + 5));\r
+            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
         } else if (isChrome) {\r
             int i = userAgent.indexOf(" chrome/") + 8;\r
-            parseVersionString(userAgent.substring(i, i + 5));\r
+            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
         } else if (isSafari) {\r
             int i = userAgent.indexOf(" version/") + 9;\r
-            parseVersionString(userAgent.substring(i, i + 5));\r
+            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
         } else if (isOpera) {\r
             int i = userAgent.indexOf(" version/");\r
             if (i != -1) {\r
@@ -87,26 +87,41 @@ public class VBrowserDetails implements Serializable {
             } else {\r
                 i = userAgent.indexOf("opera/") + 6;\r
             }\r
-            parseVersionString(userAgent.substring(i, i + 5));\r
+            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
         }\r
 \r
     }\r
 \r
     private void parseVersionString(String versionString) {\r
         int idx = versionString.indexOf('.');\r
+        if (idx < 0) {\r
+            idx = versionString.length();\r
+        }\r
+        browserMajorVersion = Integer.parseInt(safeSubstring(versionString, 0,\r
+                idx));\r
+\r
         int idx2 = versionString.indexOf('.', idx + 1);\r
         if (idx2 < 0) {\r
             idx2 = versionString.length();\r
         }\r
-        browserMajorVersion = Integer.parseInt(versionString.substring(0, idx));\r
         try {\r
-            browserMinorVersion = Integer.parseInt(versionString.substring(\r
+            browserMinorVersion = Integer.parseInt(safeSubstring(versionString,\r
                     idx + 1, idx2).replaceAll("[^0-9].*", ""));\r
         } catch (NumberFormatException e) {\r
             // leave the minor version unmodified (-1 = unknown)\r
         }\r
     }\r
 \r
+    private String safeSubstring(String string, int beginIndex, int endIndex) {\r
+        if (beginIndex < 0) {\r
+            beginIndex = 0;\r
+        }\r
+        if (endIndex < 0) {\r
+            endIndex = string.length();\r
+        }\r
+        return string.substring(beginIndex, endIndex);\r
+    }\r
+\r
     /**\r
      * Tests if the browser is Firefox.\r
      * \r