All Downloads are FREE. Search and download functionalities are using the official Maven repository.

soot.jimple.infoflow.android.resources.AbstractResourceParser Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2012 Secure Software Engineering Group at EC SPRIDE.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v2.1
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * Contributors: Christian Fritz, Steven Arzt, Siegfried Rasthofer, Eric
 * Bodden, and others.
 ******************************************************************************/
package soot.jimple.infoflow.android.resources;

import java.io.File;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Common base class for all resource parser classes
 * 
 * @author Steven Arzt
 */
public abstract class AbstractResourceParser {

	protected final Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * Opens the given apk file and provides the given handler with a stream for
	 * accessing the contained resource manifest files
	 * 
	 * @param apk            The apk file to process
	 * @param fileNameFilter If this parameter is non-null, only files with a name
	 *                       (excluding extension) in this set will be analyzed.
	 * @param handler        The handler for processing the apk file
	 */
	protected void handleAndroidResourceFiles(String apk, Set fileNameFilter, IResourceHandler handler) {
		File apkF = new File(apk);
		if (!apkF.exists())
			throw new RuntimeException("file '" + apk + "' does not exist!");

		try {
			try (ZipFile archive = new ZipFile(apkF)) {
				Enumeration entries = archive.entries();
				while (entries.hasMoreElements()) {
					ZipEntry entry = (ZipEntry) entries.nextElement();
					String entryName = entry.getName();

					try (InputStream is = archive.getInputStream(entry)) {
						handler.handleResourceFile(entryName, fileNameFilter, is);
					}
				}
			}
		} catch (Exception e) {
			logger.error("Error when looking for XML resource files in apk " + apk, e);
			if (e instanceof RuntimeException)
				throw (RuntimeException) e;
			else
				throw new RuntimeException(e);
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy