in Android/app/src/main/java/com/example/samplestickerapp/ContentFileParser.java [151:191]
private static List<Sticker> readStickers(@NonNull JsonReader reader) throws IOException, IllegalStateException {
reader.beginArray();
List<Sticker> stickerList = new ArrayList<>();
while (reader.hasNext()) {
reader.beginObject();
String imageFile = null;
List<String> emojis = new ArrayList<>(StickerPackValidator.EMOJI_MAX_LIMIT);
while (reader.hasNext()) {
final String key = reader.nextName();
if ("image_file".equals(key)) {
imageFile = reader.nextString();
} else if ("emojis".equals(key)) {
reader.beginArray();
while (reader.hasNext()) {
String emoji = reader.nextString();
if (!TextUtils.isEmpty(emoji)) {
emojis.add(emoji);
}
}
reader.endArray();
} else {
throw new IllegalStateException("unknown field in json: " + key);
}
}
reader.endObject();
if (TextUtils.isEmpty(imageFile)) {
throw new IllegalStateException("sticker image_file cannot be empty");
}
if (!imageFile.endsWith(".webp")) {
throw new IllegalStateException("image file for stickers should be webp files, image file is: " + imageFile);
}
if (imageFile.contains("..") || imageFile.contains("/")) {
throw new IllegalStateException("the file name should not contain .. or / to prevent directory traversal, image file is:" + imageFile);
}
stickerList.add(new Sticker(imageFile, emojis));
}
reader.endArray();
return stickerList;
}