Fix potential exception when reading xposedminversion

This commit is contained in:
Jim Wu 2020-12-20 17:54:53 +08:00
parent 0776d49ea3
commit 2c90990625
3 changed files with 24 additions and 4 deletions

View File

@ -66,7 +66,12 @@ public class HandleBindApp extends XC_MethodHook {
Map<String, Object> metaData = MetaDataReader.getMetaData(new File(appInfo.sourceDir));
isModule = metaData.containsKey("xposedmodule");
if (isModule) {
xposedminversion = (Integer) metaData.get("xposedminversion");
Object minVersionRaw = metaData.get("xposedminversion");
if (minVersionRaw instanceof Integer) {
xposedminversion = (Integer) minVersionRaw;
} else if (minVersionRaw instanceof String) {
xposedminversion = MetaDataReader.extractIntPart((String) minVersionRaw);
}
xposedsharedprefs = metaData.containsKey("xposedsharedprefs");
}
} catch (NumberFormatException | IOException e) {

View File

@ -104,4 +104,16 @@ public class MetaDataReader {
super.end();
}
}
public static int extractIntPart(String str) {
int result = 0, length = str.length();
for (int offset = 0; offset < length; offset++) {
char c = str.charAt(offset);
if ('0' <= c && c <= '9')
result = result * 10 + (c - '0');
else
break;
}
return result;
}
}

View File

@ -25,8 +25,6 @@ import de.robv.android.xposed.services.FileResult;
* This class is basically the same as SharedPreferencesImpl from AOSP, but
* read-only and without listeners support. Instead, it is made to be
* compatible with all ROMs.
*
* @deprecated in Android Pie or later was lost by Google, will not remove
*/
public final class XSharedPreferences implements SharedPreferences {
private static final String TAG = "XSharedPreferences";
@ -77,7 +75,12 @@ public final class XSharedPreferences implements SharedPreferences {
Map<String, Object> metaData = MetaDataReader.getMetaData(new File(m));
isModule = metaData.containsKey("xposedmodule");
if (isModule) {
xposedminversion = (Integer) metaData.get("xposedminversion");
Object minVersionRaw = metaData.get("xposedminversion");
if (minVersionRaw instanceof Integer) {
xposedminversion = (Integer) minVersionRaw;
} else if (minVersionRaw instanceof String) {
xposedminversion = MetaDataReader.extractIntPart((String) minVersionRaw);
}
xposedsharedprefs = metaData.containsKey("xposedsharedprefs");
}
} catch (NumberFormatException | IOException e) {