aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authordhewg2011-04-05 18:25:37 +0200
committerdhewg2011-04-05 18:25:37 +0200
commitd50e7af797266e20dda17a80a45c1af45b176d3d (patch)
treec6c6f923d0bbaf684c31ce4f657a69af6f33eec1 /backends
parent7ce3719587cf370b0172dc06f85ded25b3c1f263 (diff)
downloadscummvm-rg350-d50e7af797266e20dda17a80a45c1af45b176d3d.tar.gz
scummvm-rg350-d50e7af797266e20dda17a80a45c1af45b176d3d.tar.bz2
scummvm-rg350-d50e7af797266e20dda17a80a45c1af45b176d3d.zip
ANDROID: Fix endless loop in AndroidAssetArchive
Can happen on empty member filenames, seen on some Samsung firmwares.
Diffstat (limited to 'backends')
-rw-r--r--backends/platform/android/asset-archive.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/backends/platform/android/asset-archive.cpp b/backends/platform/android/asset-archive.cpp
index 26b1a6ad39..8e95029894 100644
--- a/backends/platform/android/asset-archive.cpp
+++ b/backends/platform/android/asset-archive.cpp
@@ -440,19 +440,22 @@ int AndroidAssetArchive::listMembers(Common::ArchiveMemberList &member_list) {
for (jsize i = 0; i < env->GetArrayLength(jpathlist); ++i) {
jstring elem = (jstring)env->GetObjectArrayElement(jpathlist, i);
const char *p = env->GetStringUTFChars(elem, 0);
- Common::String thispath = dir;
- if (!thispath.empty())
- thispath += "/";
+ if (strlen(p)) {
+ Common::String thispath = dir;
- thispath += p;
+ if (!thispath.empty())
+ thispath += "/";
- // Assume files have a . in them, and directories don't
- if (strchr(p, '.')) {
- member_list.push_back(getMember(thispath));
- ++count;
- } else {
- dirlist.push_back(thispath);
+ thispath += p;
+
+ // Assume files have a . in them, and directories don't
+ if (strchr(p, '.')) {
+ member_list.push_back(getMember(thispath));
+ ++count;
+ } else {
+ dirlist.push_back(thispath);
+ }
}
env->ReleaseStringUTFChars(elem, p);