[Libreoffice-commits] core.git: javaunohelper/com
rbuj
robert.buj at gmail.com
Sun Aug 10 23:22:45 PDT 2014
javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java | 66 +++++++++---------
1 file changed, 35 insertions(+), 31 deletions(-)
New commits:
commit 608f330e22e25772eb888fa33d64f9b79c0ffcc8
Author: rbuj <robert.buj at gmail.com>
Date: Sun Aug 10 19:34:40 2014 +0200
javaunohelper: Number parsing
Change-Id: Ie6856ea4c196479aef1ce00a7cf2709fea8b3e42
Reviewed-on: https://gerrit.libreoffice.org/10860
Reviewed-by: David Tardon <dtardon at redhat.com>
Tested-by: David Tardon <dtardon at redhat.com>
diff --git a/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java b/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java
index baeee60..0bae9d0 100644
--- a/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java
+++ b/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java
@@ -203,44 +203,48 @@ public class UnoUrl {
return connection.getUninterpretedString();
}
- private static int hexToInt(int ch)
- throws com.sun.star.lang.IllegalArgumentException {
- int c = Character.toLowerCase((char) ch);
- boolean isDigit = ('0' <= c && c <= '9');
- boolean isValidChar = ('a' <= c && c <= 'f') || isDigit;
-
- if (!isValidChar)
- throw new com.sun.star.lang.IllegalArgumentException(
- "Invalid UTF-8 hex byte '" + c + "'.");
-
- return isDigit ? ch - '0' : 10 + ((char) c - 'a') & 0xF;
- }
-
private static String decodeUTF8(String s)
throws com.sun.star.lang.IllegalArgumentException {
- ArrayList<Integer> v = new ArrayList<Integer>();
- for (int i = 0; i < s.length(); i++) {
- int ch = s.charAt(i);
+ try {
+ if (s.contains("%")) {
+ ArrayList<Integer> v = new ArrayList<Integer>();
+ int length = s.length();
+ for (int i = 0; i < length; i++) {
+ int ch = s.charAt(i);
+
+ if (ch == '%') {
+ if (i+3 > length)
+ throw new com.sun.star.lang.IllegalArgumentException(
+ "Incomplete trailing escape (%) pattern");
+ try {
+ ch = Integer.parseInt(s.substring(i+1,i+3),16);
+ } catch (NumberFormatException e) {
+ throw new com.sun.star.lang.IllegalArgumentException(e.toString());
+ }
+ if (ch < 0)
+ throw new com.sun.star.lang.IllegalArgumentException(
+ "Illegal hex characters in escape (%) pattern - negative value");
+ i+=2;
+ }
+
+ v.add(new Integer(ch));
+ }
- if (ch == '%') {
- int hb = hexToInt(s.charAt(++i));
- int lb = hexToInt(s.charAt(++i));
- ch = (hb << 4) | lb;
- }
+ int size = v.size();
+ byte[] bytes = new byte[size];
+ for (int i = 0; i < size; i++) {
+ Integer anInt = v.get(i);
+ bytes[i] = (byte) (anInt.intValue() & 0xFF);
+ }
- v.add(new Integer(ch));
- }
+ return new String(bytes, "UTF-8");
- int size = v.size();
- byte[] bytes = new byte[size];
- for (int i = 0; i < size; i++) {
- Integer anInt = v.get(i);
- bytes[i] = (byte) (anInt.intValue() & 0xFF);
- }
+ } else {
- try {
- return new String(bytes, "UTF-8");
+ return new String(s.getBytes(), "UTF-8");
+
+ }
} catch (UnsupportedEncodingException e) {
throw new com.sun.star.lang.IllegalArgumentException(
"Couldn't convert parameter string to UTF-8 string:" + e.getMessage());
More information about the Libreoffice-commits
mailing list