Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.fasterxml.jackson.dataformat.cbor.parse;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.exc.StreamReadException;
import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
import com.fasterxml.jackson.dataformat.cbor.CBORTestBase;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.fail;

public class CBORNumberParsingGetType1433Test
extends CBORTestBase
{
private final CBORFactory JSON_F = cborFactory();

@Test
void getNumberType() throws Exception
{
JsonParser p;

p = _createParser(jsonFactory(), " 123 ");
_verifyGetNumberTypeFail(p, "null");
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
assertNull(p.nextToken());
_verifyGetNumberTypeFail(p, "null");
p.close();
_verifyGetNumberTypeFail(p, "null");

p = _createParser(jsonFactory(), " -9 false ");
_verifyGetNumberTypeFail(p, "null");
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
assertToken(JsonToken.VALUE_FALSE, p.nextToken());
_verifyGetNumberTypeFail(p, "VALUE_FALSE");
assertNull(p.nextToken());
_verifyGetNumberTypeFail(p, "null");
p.close();
_verifyGetNumberTypeFail(p, "null");

p = _createParser(jsonFactory(), "[123, true]");
_verifyGetNumberTypeFail(p, "null");
assertToken(JsonToken.START_ARRAY, p.nextToken());
_verifyGetNumberTypeFail(p, "START_ARRAY");
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
_verifyGetNumberTypeFail(p, "VALUE_TRUE");
assertToken(JsonToken.END_ARRAY, p.nextToken());
_verifyGetNumberTypeFail(p, "END_ARRAY");
assertNull(p.nextToken());
_verifyGetNumberTypeFail(p, "null");
p.close();
_verifyGetNumberTypeFail(p, "null");
}

private void _verifyGetNumberTypeFail(JsonParser p, String token) throws Exception
{
try {
p.getNumberType();
fail("Should not pass");
} catch (StreamReadException e) {
verifyException(e, "Current token ("+token+") not numeric, can not use numeric");
}
}

private CBORFactory jsonFactory() {
return JSON_F;
}

private JsonParser _createParser(CBORFactory f, String text) throws Exception {
return f.createParser(cborDoc(text));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1975,16 +1975,16 @@ private final static int _padQuadForNulls(int firstByte) {
@Override
protected void _parseNumericValue() throws IOException
{
if (!_tokenIncomplete) {
_reportError("Internal error: number token (%s) decoded, no value set", _currToken);
}
_tokenIncomplete = false;
int tb = _typeAsInt;
// ensure we got a numeric type with value that is lazily parsed
if ((tb >> 5) != 1) {
_reportError("Current token (%s) not numeric, can not use numeric value accessors", _currToken);
if (_tokenIncomplete) {
_tokenIncomplete = false;
int tb = _typeAsInt;
// ensure we got a numeric type with value that is lazily parsed
if ((tb >> 5) == 1) {
_finishNumberToken(tb);
return;
}
}
_finishNumberToken(tb);
_reportError("Current token (%s) not numeric, can not use numeric value accessors", _currToken);
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

public class SmileDetectionTest extends BaseTestForSmile
{

@Test
public void testSimpleObjectWithHeader() throws IOException
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.fasterxml.jackson.dataformat.smile.parse;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.exc.StreamReadException;
import com.fasterxml.jackson.dataformat.smile.SmileFactory;
import com.fasterxml.jackson.dataformat.smile.BaseTestForSmile;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.fail;

public class SmileNumberParsingGetType1433Test
extends BaseTestForSmile
{
private final SmileFactory JSON_F = smileFactory(false, true, false);

@Test
void getNumberType() throws Exception
{
JsonParser p;

p = _createParser(jsonFactory(), " 123 ");
_verifyGetNumberTypeFail(p, "null");
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
assertNull(p.nextToken());
_verifyGetNumberTypeFail(p, "null");
p.close();
_verifyGetNumberTypeFail(p, "null");

p = _createParser(jsonFactory(), " -9 false ");
_verifyGetNumberTypeFail(p, "null");
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
assertToken(JsonToken.VALUE_FALSE, p.nextToken());
_verifyGetNumberTypeFail(p, "VALUE_FALSE");
assertNull(p.nextToken());
_verifyGetNumberTypeFail(p, "null");
p.close();
_verifyGetNumberTypeFail(p, "null");

p = _createParser(jsonFactory(), "[123, true]");
_verifyGetNumberTypeFail(p, "null");
assertToken(JsonToken.START_ARRAY, p.nextToken());
_verifyGetNumberTypeFail(p, "START_ARRAY");
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
_verifyGetNumberTypeFail(p, "VALUE_TRUE");
assertToken(JsonToken.END_ARRAY, p.nextToken());
_verifyGetNumberTypeFail(p, "END_ARRAY");
assertNull(p.nextToken());
_verifyGetNumberTypeFail(p, "null");
p.close();
_verifyGetNumberTypeFail(p, "null");
}

private void _verifyGetNumberTypeFail(JsonParser p, String token) throws Exception
{
try {
p.getNumberType();
fail("Should not pass");
} catch (StreamReadException e) {
verifyException(e, "Current token ("+token+") not numeric, can not use numeric");
}
}

private SmileFactory jsonFactory() {
return JSON_F;
}

private JsonParser _createParser(SmileFactory f, String text) throws Exception {
return f.createParser(_smileDoc(text));
}
}