Skip to content

Commit 5222837

Browse files
authored
fix: updated version of com.fasterxml.jackson (#36)
Updated to a new version of the com.fasterxml.jackson libraries to address CVE-2022-42004. FasterXML/jackson-databind#3582 Cleaned up the code where the jackson is used.
1 parent bf22839 commit 5222837

File tree

4 files changed

+105
-75
lines changed

4 files changed

+105
-75
lines changed

pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,13 @@
131131
<!-- used to read xhr json data for prefixes/browsers info -->
132132
<groupId>com.fasterxml.jackson.core</groupId>
133133
<artifactId>jackson-databind</artifactId>
134-
<version>2.12.6.1</version>
134+
<version>2.13.4</version>
135+
<scope>test</scope>
136+
</dependency>
137+
<dependency>
138+
<groupId>com.fasterxml.jackson.module</groupId>
139+
<artifactId>jackson-module-afterburner</artifactId>
140+
<version>2.13.4</version>
135141
<scope>test</scope>
136142
</dependency>
137143
<dependency>

src/main/java/com/salesforce/omakase/data/PrefixTables.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
* <p>
4040
* See class com.salesforce.omakase.tools.GeneratePrefixTablesClass for instructions on updating.
4141
*/
42+
@SuppressWarnings("AutoBoxing")
4243
public final class PrefixTables {
4344
static final Table<Property, Browser, Double> PROPERTIES;
4445
static final Table<Keyword, Browser, Double> KEYWORDS;

src/test/java/com/salesforce/omakase/tools/GenerateBrowserEnum.java

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,25 @@
2323
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2424
* POSSIBILITY OF SUCH DAMAGE.
2525
*/
26-
2726
package com.salesforce.omakase.tools;
2827

2928
import java.io.IOException;
29+
import java.io.InputStream;
3030
import java.net.URL;
3131
import java.net.URLConnection;
32+
import java.util.ArrayList;
3233
import java.util.Collections;
3334
import java.util.List;
3435
import java.util.Map;
3536
import java.util.regex.Matcher;
3637
import java.util.regex.Pattern;
3738

3839
import com.fasterxml.jackson.databind.ObjectMapper;
40+
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
3941
import com.google.common.base.Joiner;
4042
import com.google.common.base.Splitter;
43+
import com.google.common.collect.ImmutableList;
4144
import com.google.common.collect.Iterables;
42-
import com.google.common.collect.Lists;
4345
import com.salesforce.omakase.data.Browser;
4446
import com.salesforce.omakase.data.Prefix;
4547

@@ -55,18 +57,30 @@
5557
* @author nmcwilliams
5658
*/
5759
@SuppressWarnings({"rawtypes", "unchecked"})
58-
public class GenerateBrowserEnum {
60+
public final class GenerateBrowserEnum {
5961
private static final String BROWSERS_ENDPOINT = "https://raw.github.com/Fyrd/caniuse/master/data.json";
6062

6163
public static void main(String[] args) throws Exception {
62-
new GenerateBrowserEnum().run();
64+
run();
6365
}
6466

65-
public boolean run() throws IOException, TemplateException {
67+
public static boolean run() throws IOException, TemplateException {
6668
System.out.println("downloading browser data from caniuse.com [https://github.com/Fyrd/caniuse]...");
6769
URLConnection connection = new URL(BROWSERS_ENDPOINT).openConnection();
6870
connection.setUseCaches(false);
69-
Map map = new ObjectMapper().readValue(connection.getInputStream(), Map.class);
71+
final Map map;
72+
try (final InputStream is = connection.getInputStream()) {
73+
map = new ObjectMapper()
74+
// This adds support for using byte code to perform
75+
// deserialization:
76+
// https://github.com/FasterXML/jackson-modules-base/tree/master/afterburner
77+
// Need to set setUseValueClassLoader to false to fix a class
78+
// loader issue in Java 9
79+
// https://github.com/FasterXML/jackson-modules-base/issues/37
80+
// This means it will only look at public properties.
81+
.registerModule(new AfterburnerModule().setUseValueClassLoader(false))
82+
.readValue(is, Map.class);
83+
}
7084

7185
String earliestString = (String)Iterables.get(((Map)map.get("eras")).keySet(), 0);
7286
Matcher matcher = Pattern.compile("e-([0-9]+)").matcher(earliestString);
@@ -75,8 +89,6 @@ public boolean run() throws IOException, TemplateException {
7589

7690
Map agents = (Map)map.get("agents");
7791

78-
List<BrowserInfo> browsers = Lists.newArrayList();
79-
8092
Map ie = (Map)agents.get("ie");
8193
Map edge = (Map)agents.get("edge");
8294
Map opera = (Map)agents.get("opera");
@@ -87,34 +99,35 @@ public boolean run() throws IOException, TemplateException {
8799
Map ieMobile = (Map)agents.get("ie_mob");
88100
Map iosSafari = (Map)agents.get("ios_saf");
89101

90-
browsers.add(new BrowserInfo("ie", "IE", "Internet Explorer", Prefix.MS, versions(ie, earliest)));
91-
browsers.add(new BrowserInfo("edge", "EDGE", "Microsoft Edge", Prefix.MS, versions(edge, earliest)));
92-
browsers.add(new BrowserInfo("opera", "OPERA", "Opera", Prefix.WEBKIT, versions(opera, earliest)));
93-
browsers.add(new BrowserInfo("chrome", "CHROME", "Google Chrome", Prefix.WEBKIT, versions(chrome, earliest)));
94-
browsers.add(new BrowserInfo("safari", "SAFARI", "Safari", Prefix.WEBKIT, versions(safari, earliest)));
95-
browsers.add(new BrowserInfo("firefox", "FIREFOX", "Firefox", Prefix.MOZ, versions(firefox, earliest)));
96-
browsers.add(new BrowserInfo("android", "ANDROID", "Android Browser", Prefix.WEBKIT, versions(android, earliest)));
97-
browsers.add(new BrowserInfo("ie_mob", "IE_MOBILE", "IE Mobile", Prefix.MS, versions(ieMobile, earliest)));
98-
browsers.add(new BrowserInfo("ios_saf", "IOS_SAFARI", "Safari on iOS", Prefix.WEBKIT, versions(iosSafari, earliest)));
99-
100-
SourceWriter writer = new SourceWriter();
101-
102-
writer.generator(GenerateBrowserEnum.class);
103-
writer.classToWrite(Browser.class);
104-
writer.template("browser-enum.ftl");
105-
writer.data("browsers", browsers);
102+
final List<BrowserInfo> browsers = ImmutableList.of(
103+
new BrowserInfo("ie" , "IE" , "Internet Explorer", Prefix.MS , versions(ie, earliest)),
104+
new BrowserInfo("edge" , "EDGE" , "Microsoft Edge" , Prefix.MS , versions(edge, earliest)),
105+
new BrowserInfo("opera" , "OPERA" , "Opera" , Prefix.WEBKIT, versions(opera, earliest)),
106+
new BrowserInfo("chrome" , "CHROME" , "Google Chrome" , Prefix.WEBKIT, versions(chrome, earliest)),
107+
new BrowserInfo("safari" , "SAFARI" , "Safari" , Prefix.WEBKIT, versions(safari, earliest)),
108+
new BrowserInfo("firefox", "FIREFOX" , "Firefox" , Prefix.MOZ , versions(firefox, earliest)),
109+
new BrowserInfo("android", "ANDROID" , "Android Browser" , Prefix.WEBKIT, versions(android, earliest)),
110+
new BrowserInfo("ie_mob" , "IE_MOBILE" , "IE Mobile" , Prefix.MS , versions(ieMobile, earliest)),
111+
new BrowserInfo("ios_saf", "IOS_SAFARI", "Safari on iOS" , Prefix.WEBKIT, versions(iosSafari, earliest))
112+
);
113+
114+
SourceWriter writer = new SourceWriter()
115+
.generator(GenerateBrowserEnum.class)
116+
.classToWrite(Browser.class)
117+
.template("browser-enum.ftl")
118+
.data("browsers", browsers);
106119

107120
return writer.write();
108121
}
109122

110-
private String versions(Map browser, int indexOfCurrent) {
123+
private static String versions(Map browser, int indexOfCurrent) {
111124
List<String> all = (List<String>)browser.get("versions");
112-
List<Double> filtered = Lists.newArrayList();
125+
List<Double> filtered = new ArrayList<>();
113126

114127
for (int i = 0; i <= indexOfCurrent; i++) { // skip the last two, as they are "future" versions
115128
if (all.get(i) != null) {
116-
for (String s : Splitter.on("-").split(all.get(i))) {
117-
if (s.indexOf(".") == s.lastIndexOf(".")) { // hacky deal with something like Android 4.4.3. Just skip for now
129+
for (String s : Splitter.on('-').split(all.get(i))) {
130+
if (s.indexOf(".") == s.lastIndexOf('.')) { // hacky deal with something like Android 4.4.3. Just skip for now
118131
filtered.add(Double.valueOf(s));
119132
}
120133
}
@@ -147,7 +160,7 @@ public String getKey() {
147160
}
148161

149162
public String getPrefix() {
150-
return String.format("Prefix.%s", prefix.name());
163+
return "Prefix." + prefix.name();
151164
}
152165

153166
public String getEnumName() {

0 commit comments

Comments
 (0)