Java Bug bei String-Ersetzungen?

Status
Für weitere Antworten geschlossen.

CyborgBeta

Banned
Registriert
Jan. 2021
Beiträge
3.405
Moin,

bin etwas am Rätselraten oder sehe nicht, was hier falsch wäre:

Java:
          HashMap<String, String> dirsMap = new HashMap<>();
          dirsMap.put("all", ""); // lasse das Argument weg
          dirsMap.put("foo", "bar2=1&");
          String searchUrl =
              "https://domain.tld/pathA?arg1=abc&arg2=abc&DIRS1arg3=SEARCH1&arg4=abc";
          searchUrl = searchUrl.replace("SEARCH1", search);
          searchUrl = searchUrl.replace("DIRS1", dirsMap.get(category));
          System.out.println("searchUrl = " + searchUrl);

Daraus baue ich ein jar-File und starte es auf einem anderen Computer mit java -jar <...> (Java 17).

Die Ausgabe ist:

searchUrl = https://domain.tld/pathA?arg1=abc&;arg2=abc&arg3=suche&arg4=abc

und ich verstehe nicht, wo das Semikolon herkommt. Im Bytecode scheint der String noch intakt zu sein.

Vielleicht ein Bug?
 
Es ist im allgemeinen eine schlechte Idee Uris durch suchen/ersetzen zu ändern, wegen escape Zeichen usw. Du handelst dir damit zügig Sicherheitsprobleme ein, wenn das an der falschen Stelle schief läuft.
Nimm die dazugehörigen Klassen der jeweiligen Programmiersprache.
 
  • Gefällt mir
Reaktionen: FeelsGoodManJPG, BeBur, jebeo und 2 andere
Das war nicht meine Frage.
 
Dann versuchen wir's doch mal andersrum, paste deinen vollständigen Code und nicht nur ein halbes snippet in dem variablen fehlen ;)
 
  • Gefällt mir
Reaktionen: FeelsGoodManJPG, BeBur, BAGZZlash und 4 andere
Geht nicht, da sensible Daten. Aber das sscce ist vollständig ...

Möglicherweise liegt es auch am Charset von meiner Konsole.

Aber hier kann direkt wieder geschlossen werden, glaube nicht, dass noch etwas Sinnvolles kommt, und Dislikes könnt ihr gerne behalten.
 
Wenn der dirsMap-Eintrag für die Kategorie, die du verwendest, ein Semikolon enthält oder am Ende ein unerwünschtes Zeichen angehängt wurde, kann das die Ausgabe beeinflussen. Check mal, ob die Werte in dirsMap genau das enthalten, was du erwartest.

Manchmal können unsichtbare Zeichen wie Unicode-Zeichen oder Steuerzeichen (z. B. ein Semikolon als unsichtbares Zeichen) versehentlich in Strings eingebaut werden. Dies passiert häufig, wenn der Code in einem Editor erstellt oder bearbeitet wird. Check auch hier den genauen Inhalt der Strings mit einem Debugger oder indem du die Zeichen einzeln ausgibst z.B.

for (char c : dirsMap.get(category).toCharArray()) {
System.out.println((int) c);
}
 
  • Gefällt mir
Reaktionen: CyborgBeta
CyborgBeta schrieb:
Aber hier kann direkt wieder geschlossen werden, glaube nicht, dass noch etwas Sinnvolles kommt, und Dislikes könnt ihr gerne behalten.
so ein Kommentar nach 1h am Montag morgen ... melde deinen Beitrag einfach selbst, dann wird ein Mod den Thread schließen. Ansonsten, deine Art insgesamt im Forum ist schon fragwürdig, evtl. irgendwann mal Selbstreflektion betreiben. Du weißt am Ende eh immer alles besser, kannst Kritik oder Nachfragen nur schlecht bis gar nicht annehmen. Aber klar, du bist ja auch DevOps im Unternehmen und kannst eigentlich eh alles.

Achja, @Topic noch bevor geschlossen wird dann:
wie du selbst schon festgestellt hast, ein Encoding Problem scheint wahrscheinlich wenn es im Bytecode noch korrekt ist, resp. du es ja im Debugger auch sehen kannst.
Viel Erfolg.
 
  • Gefällt mir
Reaktionen: sh., trabifant, dms und 8 andere
Hab den Fehler gefunden.

Dozzle (https://dozzle.dev/ (Log-Viewer für Docker)) fügt in die URL nach dem ersten & automatisch ein ; ein, wenn man die URL (also den String) auf der Konsole ausgeben lässt.

Der Bytecode ist in Ordnung (nach unzip und xdd Main.class).

@abcddcba Genau das meinte ich, unfreundliches Verhalten, wenn man eine ganz normale Frage gestellt hat.
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben