update from master subtree
authorNiki Roo <niki@nikiroo.be>
Wed, 3 Jun 2020 13:55:39 +0000 (15:55 +0200)
committerNiki Roo <niki@nikiroo.be>
Wed, 3 Jun 2020 13:55:39 +0000 (15:55 +0200)
library/WebLibraryServer.java
supported/BasicSupport.java
supported/Text.java

index 1fce3911eb67f5b47cb95198a9a8c542da9ebf2d..6260f6a5c6744d9c9411d0941ad3ad0a54c5e58b 100644 (file)
@@ -4,7 +4,6 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -388,7 +387,11 @@ public class WebLibraryServer extends WebLibraryServerHtml {
        protected Response getCover(String uri, WLoginResult login)
                        throws IOException {
                String[] uriParts = uri.split("/");
+               int startAt = 0;
                int off = 2; // "" and "cover"
+               for (int i = 0; i < off; i++) {
+                       startAt += uriParts[i].length() + "/".length();
+               }
 
                if (uriParts.length < off + 2) {
                        return NanoHTTPD.newFixedLengthResponse(Status.BAD_REQUEST,
@@ -396,7 +399,7 @@ public class WebLibraryServer extends WebLibraryServerHtml {
                }
 
                String type = uriParts[off + 0];
-               String id = URLDecoder.decode(uriParts[off + 1], "UTF-8");
+               String id = uri.substring(startAt + type.length() + "/".length());
 
                InputStream in = null;
 
@@ -430,6 +433,10 @@ public class WebLibraryServer extends WebLibraryServerHtml {
                        throws IOException {
                String[] uriParts = uri.split("/");
                int off = 2; // "" and "cover"
+               int startAt = 0;
+               for (int i = 0; i < off; i++) {
+                       startAt += uriParts[i].length() + "/".length();
+               }
 
                if (uriParts.length < off + 2) {
                        return NanoHTTPD.newFixedLengthResponse(Status.BAD_REQUEST,
@@ -447,7 +454,7 @@ public class WebLibraryServer extends WebLibraryServerHtml {
                }
 
                String type = uriParts[off + 0];
-               String id = URLDecoder.decode(uriParts[off + 1], "UTF-8");
+               String id = uri.substring(startAt + type.length() + "/".length());
 
                if ("source".equals(type)) {
                        sourceCover(id, login, luid);
index ff9ecaf9be3cc80666d964ee48da375d1307bae6..9b56f885d94a14ff1025b3833aa34209c48374dd 100644 (file)
@@ -354,6 +354,9 @@ public abstract class BasicSupport {
                        Scanner scan = new Scanner(in);
                        scan.useDelimiter("\0");
                        try {
+                               if(!scan.hasNext())
+                                       throw new IOException("The given input was empty");
+                               
                                return new JSONObject(scan.next());
                        } catch (JSONException e) {
                                throw new IOException(e);
index 45d970a656322ef8e312f7cd6950a83123aedfe7..45b761a1f2e0fba52b91aff057a303086a40e134 100644 (file)
@@ -100,10 +100,12 @@ class Text extends BasicSupport {
                @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
-               scan.next(); // Title
-               scan.next(); // Author (Date)
-               String chapter0 = scan.next(); // empty or Chapter 0
-               while (chapter0.isEmpty()) {
+               if (scan.hasNext())
+                       scan.next(); // Title
+               if (scan.hasNext())
+                       scan.next(); // Author (Date)
+               String chapter0 = "";
+               while (scan.hasNext() && chapter0.isEmpty()) {
                        chapter0 = scan.next();
                }
 
@@ -126,15 +128,20 @@ class Text extends BasicSupport {
                @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
-               return scan.next();
+               if (scan.hasNext())
+                       return scan.next();
+               return "";
        }
 
        private String getAuthor() {
                @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
-               scan.next();
-               String authorDate = scan.next();
+               if (scan.hasNext())
+                       scan.next();
+               String authorDate = "";
+               if (scan.hasNext())
+                       authorDate = scan.next();
 
                String author = authorDate;
                int pos = authorDate.indexOf('(');
@@ -149,8 +156,11 @@ class Text extends BasicSupport {
                @SuppressWarnings("resource") // cannot close, or we loose getInput()!
                Scanner scan = new Scanner(getInput(), "UTF-8");
                scan.useDelimiter("\\n");
-               scan.next();
-               String authorDate = scan.next();
+               if (scan.hasNext())
+                       scan.next();
+               String authorDate = "";
+               if (scan.hasNext())
+                       authorDate = scan.next();
 
                String date = "";
                int pos = authorDate.indexOf('(');