Fix importing of GPX traces with a leading byte order marker
authorTom Hughes <tom@compton.nu>
Fri, 14 Jun 2019 17:49:04 +0000 (18:49 +0100)
committerTom Hughes <tom@compton.nu>
Fri, 14 Jun 2019 18:01:53 +0000 (19:01 +0100)
Fixes #2258

lib/gpx.rb
test/controllers/api/traces_controller_test.rb
test/controllers/traces_controller_test.rb
test/gpx/fixtures/b.gpx
test/models/trace_test.rb

index 0aa23ae..1212db6 100644 (file)
@@ -51,7 +51,7 @@ module GPX
       rescue Archive::Error
         io = ::File.open(@file)
 
-        case MimeMagic.by_magic(io).type
+        case MimeMagic.by_magic(io)&.type
         when "application/gzip" then io = Zlib::GzipReader.open(@file)
         when "application/x-bzip" then io = Bzip2::FFI::Reader.open(@file)
         end
index 24ff6ee..499fefb 100644 (file)
@@ -153,7 +153,7 @@ module Api
       # And finally we should be able to do it with the owner of the trace
       basic_authorization anon_trace_file.user.display_name, "test"
       get :data, :params => { :id => anon_trace_file.id }
-      check_trace_data anon_trace_file, "66179ca44f1e93d8df62e2b88cbea732"
+      check_trace_data anon_trace_file, "db4cb5ed2d7d2b627b3b504296c4f701"
     end
 
     # Test downloading a trace that doesn't exist through the api
index daa8a67..84a6557 100644 (file)
@@ -388,7 +388,7 @@ class TracesControllerTest < ActionController::TestCase
 
     # And finally we should be able to do it with the owner of the trace
     get :data, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }, :session => { :user => anon_trace_file.user }
-    check_trace_data anon_trace_file, "66179ca44f1e93d8df62e2b88cbea732"
+    check_trace_data anon_trace_file, "db4cb5ed2d7d2b627b3b504296c4f701"
   end
 
   # Test downloading a trace that doesn't exist
index 4471398..d69daa5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <gpx
   version="1.0"
   creator="GPSBabel - http://www.gpsbabel.org"
index 24c66c4..7787728 100644 (file)
@@ -146,7 +146,7 @@ class TraceTest < ActiveSupport::TestCase
 
   def test_xml_file
     check_xml_file("a", "848caa72f2f456d1bd6a0fdf228aa1b9")
-    check_xml_file("b", "66179ca44f1e93d8df62e2b88cbea732")
+    check_xml_file("b", "db4cb5ed2d7d2b627b3b504296c4f701")
     check_xml_file("c", "848caa72f2f456d1bd6a0fdf228aa1b9")
     check_xml_file("d", "abd6675fdf3024a84fc0a1deac147c0d")
     check_xml_file("f", "a7c05d676c77dc14369c21be216a3713")
@@ -263,6 +263,17 @@ class TraceTest < ActiveSupport::TestCase
     end
   end
 
+  def test_import_handles_plain_with_bom
+    FakeFS do
+      FakeFS::FileSystem.clone(Rails.root.join("test", "gpx"))
+      trace = create(:trace, :fixture => "b")
+
+      trace.import
+
+      assert_equal 1, trace.size
+    end
+  end
+
   def test_import_handles_gz
     trace = create(:trace, :fixture => "d")