fix: ArrayIndexOutOfBoundsException with multiple bytes for a character #32
This commit is contained in:
parent
fef740668b
commit
733242f980
|
@ -793,6 +793,16 @@ public final class Ulid implements Serializable, Comparable<Ulid> {
|
||||||
return false; // null or wrong size!
|
return false; // null or wrong size!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < chars.length; i++) {
|
||||||
|
try {
|
||||||
|
if (ALPHABET_VALUES[chars[i]] == -1) {
|
||||||
|
return false; // invalid character!
|
||||||
|
}
|
||||||
|
} catch (ArrayIndexOutOfBoundsException e) {
|
||||||
|
return false; // Multibyte character!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The time component has 48 bits.
|
// The time component has 48 bits.
|
||||||
// The base32 encoded time component has 50 bits.
|
// The base32 encoded time component has 50 bits.
|
||||||
// The time component cannot be greater than than 2^48-1.
|
// The time component cannot be greater than than 2^48-1.
|
||||||
|
@ -805,12 +815,6 @@ public final class Ulid implements Serializable, Comparable<Ulid> {
|
||||||
return false; // time overflow!
|
return false; // time overflow!
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < chars.length; i++) {
|
|
||||||
if (ALPHABET_VALUES[chars[i]] == -1) {
|
|
||||||
return false; // invalid character!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true; // It seems to be OK.
|
return true; // It seems to be OK.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ public class UlidTest extends UlidFactoryTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFromStrings() {
|
public void testFromString() {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
for (int i = 0; i < DEFAULT_LOOP_MAX; i++) {
|
for (int i = 0; i < DEFAULT_LOOP_MAX; i++) {
|
||||||
final long msb = random.nextLong();
|
final long msb = random.nextLong();
|
||||||
|
@ -610,6 +610,16 @@ public class UlidTest extends UlidFactoryTest {
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
// success
|
// success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/f4b6a3/ulid-creator/issues/32
|
||||||
|
// https://www.compart.com/en/unicode/U+3617 (㘗: whisper; to whistle)
|
||||||
|
ulid = "0123456789ABCDEFGHJKMNPQR\u3617";
|
||||||
|
try {
|
||||||
|
Ulid.toCharArray(ulid);
|
||||||
|
fail("Should throw an exception");
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// success
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue