1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Added minimal validation of parsed shares coming from server to avoid crashes due to bad formed or unexpected responses

This commit is contained in:
David A. Velasco 2014-02-20 12:56:29 +01:00
parent c3f4382200
commit 9a3ad5a4ec

View File

@ -221,7 +221,8 @@ public class ShareXMLParser {
}
String name = parser.getName();
if (name.equalsIgnoreCase(NODE_ELEMENT)) {
shares.add(readElement(parser));
readElement(parser, shares);
} else if (name.equalsIgnoreCase(NODE_ID)) {// Parse Create XML Response
share = new OCShare();
String value = readNode(parser, NODE_ID);
@ -245,7 +246,6 @@ public class ShareXMLParser {
shares.add(share);
}
return shares;
}
@ -258,7 +258,7 @@ public class ShareXMLParser {
* @throws XmlPullParserException
* @throws IOException
*/
private OCShare readElement(XmlPullParser parser) throws XmlPullParserException, IOException {
private void readElement(XmlPullParser parser, ArrayList<OCShare> shares) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
OCShare share = new OCShare();
@ -272,7 +272,9 @@ public class ShareXMLParser {
String name = parser.getName();
if (name.equalsIgnoreCase(NODE_ELEMENT)) {
share = readElement(parser);
// patch to work around servers responding with extra <element> surrounding all the shares on the same file before
// https://github.com/owncloud/core/issues/6992 was fixed
readElement(parser, shares);
} else if (name.equalsIgnoreCase(NODE_ID)) {
share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
@ -329,7 +331,13 @@ public class ShareXMLParser {
}
}
return share;
if (isValidShare(share)) {
shares.add(share);
}
}
private boolean isValidShare(OCShare share) {
return (share.getIdRemoteShared() > -1);
}
private void fixPathForFolder(OCShare share) {