[Java] DictionaryEncoder doesn't crash when decoding index outside of Dictionary
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 74/100
Direção de pesquisa
Comece em DictionaryEncoder.decode e reproduza o comportamento com o teste testReferencingIndexOutOfBounds fornecido. Confirme que um índice codificado igual à quantidade de valores do dicionário lança IllegalArgumentException com a mensagem esperada, enquanto os índices válidos continuam sendo decodificados normalmente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the bug, including details regarding any error messages, version, and platform.
Background
When manually creating an encoded vector, with values referencing indices in a Dictionary, it is possible to have values equal to valueCount of the Dictionary vector i.e. one index out of bounds. This is interpreted as a null value in the Dictionary.
Example
Dictionary
| Index | Original Value |
|---|---|
| 0 | Foo |
Encoded Vector - 1
| Index | Encoded Value | Expected Decode Outcome | Actual Outcome |
|---|---|---|---|
| 0 | 0 | Return the original value | Returns the original value |
Encoded Vector - 2
| Index | Encoded Value | Expected Decode Outcome | Actual Outcome |
|---|---|---|---|
| 0 | 1 | Raise IllegalArgumentException |
Returns null |
Encoded Vector - 3
| Index | Encoded Value | Expected Decode Outcome | Actual Outcome |
|---|---|---|---|
| 0 | 2 | Raise IllegalArgumentException |
Raises IllegalArgumentException |
Test to reproduce the error
@Test
public void testReferencingIndexOutOfBounds() {
// Index at which the original value will be stored at in the dictionary
var encodedIndex = 0;
// The encoded value that references an index in the dictionary
var indexReferenced = 1;
try (final IntVector encodedVector = new IntVector("encodings", allocator);
final VarCharVector dictionaryVector = newVarCharVector("dict", allocator); ) {
var originalValue = "Foo";
dictionaryVector.allocateNew(1);
dictionaryVector.setValueCount(1);
dictionaryVector.set(encodedIndex, originalValue.getBytes(StandardCharsets.UTF_8));
encodedVector.allocateNew(1);
encodedVector.setValueCount(1);
encodedVector.set(0, indexReferenced);
Dictionary dictionary =
new Dictionary(dictionaryVector, new DictionaryEncoding(1L, false, null));
try (ValueVector decoded = DictionaryEncoder.decode(encodedVector, dictionary)) {
fail("There should be an exception when decoding index outside dictionary's range.");
} catch (Exception e) {
assertEquals("Provided dictionary does not contain value for index " + indexReferenced, e.getMessage());
}
}
}
- Linguagem predominante
- Java
- Estrelas
- 95
- Forks
- 154
- Merge médio
- 2d 16h
- PRs com merge (30d)
- 9
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/arrow-java
-
Type: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
apache/arrow-java#1300 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
apache/arrow-java#1261 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
apache/arrow-java#1236 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
apache/arrow-java#1230 ·
-
Type: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
apache/arrow-java#1205 ·
Todas as issues de apache/arrow-java
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
infinispan/infinispan#18150 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
-
untriaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
opensearch-project/k-NN#3597 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100