Return Invalid bundle status if rhizome manifest not found during import

This commit is contained in:
Jeremy Lakeman 2017-05-09 14:26:23 +09:30
parent 6c4e7de574
commit cc0d6fcdb9
3 changed files with 17 additions and 5 deletions

View File

@ -21,6 +21,8 @@
package org.servalproject.servaldna;
import org.servalproject.servaldna.rhizome.RhizomeBundleStatus;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
@ -347,6 +349,10 @@ public class ServalDCommand
public long rowId;
public long insertTime;
public RhizomeBundleStatus getBundleStatus() throws RhizomeBundleStatus.InvalidException {
return RhizomeBundleStatus.fromCode(result);
}
@Override
public void putString(String value) {
try {

View File

@ -34,7 +34,9 @@ public enum RhizomeBundleStatus {
FAKE(5), // manifest signature not valid
INCONSISTENT(6), // manifest filesize/filehash does not match supplied payload
NO_ROOM(7), // doesn't fit; store may contain more important bundles
READONLY(8) // cannot modify manifest; secret unknown
READONLY(8), // cannot modify manifest; secret unknown
BUSY(9), // the backend was busy, you can try again
TOO_BIG(10) // manifest is too large
;
final public int code;

View File

@ -429,7 +429,8 @@ enum rhizome_bundle_status rhizome_bundle_import_files(rhizome_manifest *m, rhiz
}
if (!EOCD){
ret=WHY("Expected zip EOCD marker 0x504b0506 near end of file");
WHY("Expected zip EOCD marker 0x504b0506 near end of file");
ret = RHIZOME_BUNDLE_STATUS_INVALID;
goto end;
}
@ -438,7 +439,8 @@ enum rhizome_bundle_status rhizome_bundle_import_files(rhizome_manifest *m, rhiz
}else{
if (buff[read_len-2]!=0x41 || buff[read_len-1]!=0x10){
ret=WHYF("Expected 0x4110 marker at end of file");
WHYF("Expected 0x4110 marker at end of file");
ret = RHIZOME_BUNDLE_STATUS_INVALID;
goto end;
}
m->manifest_all_bytes = read_uint16(&buff[read_len-4]);
@ -450,11 +452,13 @@ enum rhizome_bundle_status rhizome_bundle_import_files(rhizome_manifest *m, rhiz
}
if (m->manifest_all_bytes < 1 || m->manifest_all_bytes > MAX_MANIFEST_BYTES){
ret=WHYF("Invalid manifest length %zu", m->manifest_all_bytes);
WHYF("Invalid manifest length %zu", m->manifest_all_bytes);
ret = RHIZOME_BUNDLE_STATUS_INVALID;
goto end;
}
if (manifest_ptr < buff || manifest_ptr + m->manifest_all_bytes > buff + read_len){
ret=WHY("Invalid manifest offset");
WHY("Invalid manifest offset");
ret = RHIZOME_BUNDLE_STATUS_INVALID;
goto end;
}
bcopy(manifest_ptr, m->manifestdata, m->manifest_all_bytes);