Skip to content

Commit

Permalink
Throw on invalid coordinates
Browse files Browse the repository at this point in the history
  • Loading branch information
tananaev committed Dec 17, 2022
1 parent 1c79163 commit ddf72b3
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 14 deletions.
10 changes: 6 additions & 4 deletions src/main/java/org/traccar/model/Position.java
Expand Up @@ -227,9 +227,10 @@ public double getLatitude() {
}

public void setLatitude(double latitude) {
if (latitude >= -90 && latitude <= 90) {
this.latitude = latitude;
if (latitude < -90 || latitude > 90) {
throw new IllegalArgumentException("Latitude out of range");
}
this.latitude = latitude;
}

private double longitude;
Expand All @@ -239,9 +240,10 @@ public double getLongitude() {
}

public void setLongitude(double longitude) {
if (longitude >= -180 && longitude <= 180) {
this.longitude = longitude;
if (longitude < -180 || longitude > 180) {
throw new IllegalArgumentException("Longitude out of range");
}
this.longitude = longitude;
}

private double altitude; // value in meters
Expand Down
Expand Up @@ -151,15 +151,11 @@ protected Object decode(

position.setCourse(BitUtil.from(flags, 5) * 45);

position.setLatitude(buf.readUnsignedMedium() * 90.0 / (1 << 23));
if (position.getLatitude() > 90) {
position.setLatitude(position.getLatitude() - 180);
}
double latitude = buf.readUnsignedMedium() * 90.0 / (1 << 23);
position.setLatitude(latitude > 90 ? latitude - 180 : latitude);

position.setLongitude(buf.readUnsignedMedium() * 180.0 / (1 << 23));
if (position.getLongitude() > 180) {
position.setLongitude(position.getLongitude() - 360);
}
double longitude = buf.readUnsignedMedium() * 180.0 / (1 << 23);
position.setLongitude(longitude > 180 ? longitude - 360 : longitude);

int speed = buf.readUnsignedByte();
position.setSpeed(UnitsConverter.knotsFromKph(speed));
Expand Down
12 changes: 11 additions & 1 deletion src/test/java/org/traccar/protocol/BceProtocolDecoderTest.java
@@ -1,19 +1,29 @@
package org.traccar.protocol;

import org.junit.Ignore;
import org.junit.Test;
import org.traccar.ProtocolTest;
import org.traccar.model.Position;

public class BceProtocolDecoderTest extends ProtocolTest {

@Ignore
@Test
public void testDecode() throws Exception {
public void testDecodeFail() throws Exception {

var decoder = inject(new BceProtocolDecoder(null));

// Needs to be fixed
verifyPositions(decoder, binary(
"18ed450cf3140300c800a53a62972f7bde03c0ffffc0814000e03e354135e34b42121c55fb0000000000d18c060103025d19ab00540000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b5c400000000000000010104080162a72f7bde03c0ffffc0814000ef3e8e4431e34b42061c54fc0000000000d18c060103025d19ab00540000000000000000000000000000000000000000000000000000000000000000000000000000000000000017b5c400000000000000010100000053"));

}

@Test
public void testDecode() throws Exception {

var decoder = inject(new BceProtocolDecoder(null));

verifyNull(decoder, binary(
"3ab90b71bc1503000300c10bff11"));

Expand Down
Expand Up @@ -29,7 +29,7 @@ public void testDecode() throws Exception {
"<esn>0-2682225</esn>",
"<unixTime>1585105370</unixTime>",
"<gps>N</gps>",
"<payload length=\"9\" source=\"pc\" encoding=\"hex\">0x8EFE2D97DDEA420018</payload>",
"<payload length=\"9\" source=\"pc\" encoding=\"hex\">0x00C583EACD37210A00</payload>",
"</stuMessage>",
"</stuMessages>")));

Expand Down

0 comments on commit ddf72b3

Please sign in to comment.