Don't return broken matches when requested unsigned

Change-Id: I29cddd0e4efa783d6ca06eed3e2b8ecc69f2f9f9
diff --git a/Changes b/Changes
index d5fc72b..31298c5 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
-0.64.0 2025-03-28
+0.64.0 2025-04-30
     - [feature] Support signed matchids to prevent consecutive
       positional requests (diewald)
+    - [feature] Add support for krill.index.textSize.max (kupietz)
 
 0.63.3 2024-12-15
     - [performance] Improve short circuit on count=0 and
diff --git a/src/main/java/de/ids_mannheim/korap/response/Match.java b/src/main/java/de/ids_mannheim/korap/response/Match.java
index 0c18d7c..d1e95f5 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -208,6 +208,9 @@
     public Match (int maxTokenMatchSize, String idString, boolean includeHighlights) {
         MatchIdentifier id = new MatchIdentifier(idString);
 
+        if (id.getTextSigle() == "" && id.getDocID() == "")
+            return;
+        
         if (id.getStartPos() > -1) {
 			this.mirrorIdentifier = id.toString();
 
diff --git a/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java b/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java
index e94f13a..104aefb 100644
--- a/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java
+++ b/src/main/java/de/ids_mannheim/korap/response/match/MatchIdentifier.java
@@ -105,6 +105,7 @@
                 // No signature returned
                 if (hmacStr == null) {
                     this.textSigle = "";
+                    this.docID = "";
                     return;
                 };
 
@@ -115,6 +116,7 @@
                 
                 if (!MessageDigest.isEqual(hmacBytes, hmacVerify)) {
                     this.textSigle = "";
+                    this.docID = "";
                     return;
                 };
             };
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
index 57d8177..d7a9009 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -387,6 +387,37 @@
                 km.getSnippetHTML());
     };
 
+    @Test
+    public void indexExampleSign () throws IOException, QueryException {
+
+        MatchIdentifier.initMac("tree");
+
+        
+        KrillIndex ki = new KrillIndex();
+        ki.addDoc(createSimpleFieldDoc());
+        ki.commit();
+
+        Match km = ki.getMatchInfo("match-c1!d1-p7-9(4)8-8(2)7-8", "tokens",
+                                   null, null, false, false);
+
+        JsonNode res = mapper.readTree(km.toJsonString());
+        assertEquals("Invalid match identifier", res.at("/errors/0/1").asText());
+        assertEquals("", res.at("/matchID").asText());
+        assertEquals("", res.at("/fields/0/key").asText());
+
+
+        km = ki.getMatchInfo("match-c1!d1-p7-9(2)7-8(1)8-8x_07WRwmjA5EigwG8wYcURhnz_WkL9cepvU96hC2mp6SE", "tokens",
+                                   null, null, false, false);
+
+        res = mapper.readTree(km.toJsonString());
+        assertEquals("", res.at("/errors/0/1").asText());
+        assertEquals("match-c1!d1-p7-9(2)7-8(1)8-8x_07WRwmjA5EigwG8wYcURhnz_WkL9cepvU96hC2mp6SE", res.at("/matchID").asText());
+        assertEquals("ID", res.at("/fields/0/key").asText());
+
+        MatchIdentifier.initMac("");
+    };
+
+    
 
     @Test
     public void indexNewStructure () throws IOException, QueryException {