Skip to content

Commit

Permalink
issue(8448): allow URL with + sign in entry tabs (#8508)
Browse files Browse the repository at this point in the history
* clean code
* add java doc
* test

issue: #8448
  • Loading branch information
alexandre-cremieux authored Feb 26, 2022
1 parent 0e81417 commit f17eb40
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 10 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve
- We fixed an issue where an exception could occur when saving the preferences [#7614](https://github.com/JabRef/jabref/issues/7614)
- We fixed an issue where "Copy DOI url" in the right-click menu of the Entry List would just copy the DOI and not the DOI url. [#8389](https://github.com/JabRef/jabref/issues/8389)
- We fixed an issue where opening the console from the drop-down menu would cause an exception. [#8466](https://github.com/JabRef/jabref/issues/8466)
- We fixed an issue where pasting a URL was replacing + signs by spaces making the URL unreachable. [#8448](https://github.com/JabRef/jabref/issues/8448)

### Removed

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package org.jabref.logic.formatter.bibtexfields;

import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jabref.logic.cleanup.Formatter;
import org.jabref.logic.l10n.Localization;

/**
* Cleanup URL link
* Cleanup URL link.
* <p>
* Expose string representations URL links clean up logic.
* </p>
*/
public class CleanupUrlFormatter extends Formatter {

Expand All @@ -26,14 +31,30 @@ public String getKey() {
return "cleanup_url";
}

/**
* Escape and decodes a String from the application/x-www-form-urlencoded MIME format.
* <p>
* Method will also try to find a URL placed after "url=" or "to=".
* <p>
* The conversion process is the same as executed by {@link URLDecoder} to try to
* take guarantees against code injections.
* <p>
* The plus sign is replaced by its correspondent code (%2b) to avoid the character
* to be replaced by a space during the decoding execution.
*
* @param url should not be null
* @return the decoded URL as a String representation
*
* @see URLDecoder#decode(String, Charset)
*/
@Override
public String format(String value) {
String decodedLink = value;
String toDecode = value;

Matcher matcher = PATTERN_URL.matcher(value);
public String format(String url) {
var toDecode = Objects
.requireNonNull(url, "Null url")
.replaceAll("\\+", "%2b");
Matcher matcher = PATTERN_URL.matcher(toDecode);
if (matcher.find()) {
toDecode = matcher.group(1);
return URLDecoder.decode(matcher.group(1), StandardCharsets.UTF_8);
}
return URLDecoder.decode(toDecode, StandardCharsets.UTF_8);
}
Expand All @@ -46,8 +67,9 @@ public String getDescription() {
@Override
public String getExampleInput() {
return "https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=11&cad=" +
"rja&uact=8&ved=0ahUKEwjg3ZrB_ZPXAhVGuhoKHYdOBOg4ChAWCCYwAA&url=" +
"http%3A%2F%2Fwww.focus.de%2Fgesundheit%2Fratgeber%2Fherz%2Ftest%2" +
"Flebenserwartung-werden-sie-100-jahre-alt_aid_363828.html" + "&usg=AOvVaw1G6m2jf-pTHYkXceii4hXU";
"rja&uact=8&ved=0ahUKEwjg3ZrB_ZPXAhVGuhoKHYdOBOg4ChAWCCYwAA&url=" +
"http%3A%2F%2Fwww.focus.de%2Fgesundheit%2Fratgeber%2Fherz%2Ftest%2" +
"Flebenserwartung-werden-sie-100-jahre-alt_aid_363828.html" +
"&usg=AOvVaw1G6m2jf-pTHYkXceii4hXU";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,12 @@ void formatExample() {
"gesundheit/ratgeber/herz/test/lebenserwartung-werden-sie-100-jahre-alt_aid_363828.html",
formatter.format(formatter.getExampleInput()));
}

@Test
void shouldNotReplacePlusOperatorAsASignInURL() {
assertEquals(
"https://www.chicago.gov/content/dam/city/depts/cdot/Red Light Cameras/2022/Sutton+Tilahun_Chicago-Camera-Ticket_Exec Summary-Final-Jan10.pdf",
formatter.format("https://www.chicago.gov/content/dam/city/depts/cdot/Red Light Cameras/2022/Sutton+Tilahun_Chicago-Camera-Ticket_Exec Summary-Final-Jan10.pdf")
);
}
}

0 comments on commit f17eb40

Please sign in to comment.