From f01f7f75373963e7470d5ca6abbc98ca1414beff Mon Sep 17 00:00:00 2001 From: Thomas Kuehne Date: Sat, 4 Oct 2025 00:00:00 +0200 Subject: [PATCH] GpxParser: improve GPX file detection Add support for byte order marks (BOM) and UTF-16 big endian / little endian. --- .../gadgetbridge/util/gpx/GpxParser.java | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/gpx/GpxParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/gpx/GpxParser.java index 74885547e2..a5aba7d9ba 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/gpx/GpxParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/gpx/GpxParser.java @@ -1,4 +1,4 @@ -/* Copyright (C) 2023-2024 José Rebelo +/* Copyright (C) 2023-2025 José Rebelo, Thomas Kuehne This file is part of Gadgetbridge. @@ -42,13 +42,23 @@ import nodomain.freeyourgadget.gadgetbridge.util.gpx.model.GpxWaypoint; public class GpxParser { private static final Logger LOG = LoggerFactory.getLogger(GpxParser.class); - public static final byte[] XML_HEADER = new byte[]{ - '<', '?', 'x', 'm', 'l' + public static final byte[][] XML_HEADER = { + {'<', '?', 'x', 'm', 'l'}, + {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF, '<', '?', 'x', 'm', 'l'}, // UTF-8 with BOM + {'<', 0, '?', 0, 'x', 0, 'm', 0, 'l', 0}, // UTF-16 LE + {(byte) 0xFF, (byte) 0xFE, '<', 0, '?', 0, 'x', 0, 'm', 0, 'l', 0}, // UTF-16 LE with BOM + {0, '<', 0, '?', 0, 'x', 0, 'm', 0, 'l'}, // UTF-16 BE + {(byte) 0xFE, (byte) 0xFF, 0, '<', 0, '?', 0, 'x', 0, 'm', 0, 'l'} // UTF-16 BE with BOM }; - // Some gpx files start with "