X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FImporter.java;h=e7285c42ca329c7a6e84c73fba0189c228493781;hb=f4053377fa15da2f11e82955bfab86e673fa371c;hp=a159ddedf4763859aefe8fc51ac82479d567ce0f;hpb=f157aed840bdd5b8ef04902d2326d916f71139da;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/serial/Importer.java b/src/be/nikiroo/utils/serial/Importer.java index a159dde..e7285c4 100644 --- a/src/be/nikiroo/utils/serial/Importer.java +++ b/src/be/nikiroo/utils/serial/Importer.java @@ -56,27 +56,33 @@ public class Importer { * because it is not compatible with this code * @throws ClassNotFoundException * if a class described in the serialised data cannot be found + * @throws IOException + * if the content cannot be read (for instance, corrupt data) */ public Importer read(String data) throws NoSuchFieldException, - NoSuchMethodException, ClassNotFoundException { + NoSuchMethodException, ClassNotFoundException, IOException { + Scanner scan = new Scanner(data); try { - Scanner scan = new Scanner(data); scan.useDelimiter("\n"); while (scan.hasNext()) { String line = scan.next(); if (line.startsWith("ZIP:")) { - line = StringUtils.unzip64(line.substring("ZIP:".length())); + try { + line = StringUtils.unzip64(line.substring("ZIP:" + .length())); + } catch (IOException e) { + throw new IOException( + "Internal error when decoding ZIP content: input may be corrupt"); + } read(line); } else { processLine(line); } } + } finally { scan.close(); - } catch (IOException e) { - throw new NoSuchMethodException( - "Internal error when decoding ZIP content: input may be corrupt"); } return this; @@ -99,9 +105,11 @@ public class Importer { * because it is not compatible with this code * @throws ClassNotFoundException * if a class described in the serialised data cannot be found + * @throws IOException + * if the content cannot be read (for instance, corrupt data) */ private boolean processLine(String line) throws NoSuchFieldException, - NoSuchMethodException, ClassNotFoundException { + NoSuchMethodException, ClassNotFoundException, IOException { // Defer to latest child if any if (child != null) { if (child.processLine(line)) { @@ -146,7 +154,8 @@ public class Importer { if (line.endsWith(":")) { // field value is compound currentFieldName = line.substring(0, line.length() - 1); - } else if (line.startsWith(":") || !line.contains(":")) { + } else if (line.startsWith(":") || !line.contains(":") + || line.startsWith("\"") || CustomSerializer.isCustom(line)) { // not a field value but a direct value me = SerialUtils.decode(line); } else {