** Description changed:

- In the effort to reduce boost dependency in urdfdom and urdfdom-headers
- [2] regressions wrt locale handling were introduced. Parsing of floating
- point values in URDF (a XML language) was now locale dependent, ie on
- European systems were the decimal separator is "," instead of "."
- parsing would now fail due to std::stod expecting "1,23" instead of
- "1.23" (no, we do not localize xml files, see also [3] for a more
- technical summary). The regressed versions were released as 1.0. Shortly
- after the release (some of) the regressions were detected [3] and fixes
- merged [3][4]. Unfortunately those fixed merges were not released until
- a long time later, too late for Ubuntu 18.04 by far and potentially even
- for 20.04. More regressions were noticed and fixed later on (disclaimer:
- by me) [5].
+ [Impact]
  
- urdfdom is used mostly if not exclusively in the ROS community
- (including gazebo) which is a somewhat slow adopter of newer Ubuntu (and
- ros) releases but more and more people are now seeing these regressions
- in various places. To save more peoples time I propose to do a patch
- version update and pull urdfdom_headers version 1.0.3 as well as urdfdom
- version 1.0.3 from debian sid. I argue against applying a patch because
- the diff between 1.0.0 and 1.0.3 is almost identical to a set of patches
- fixing the regressions. Updating to the upstream patch release will
- therefore improve tracing of the ubuntu downstream version to the
- upstream versioning.
+ * The parsing done by the code of urdfdom truncate floating values on
+ systems that are not using the locales defined by default on English
+ systems. The users of this system are getting wrong values which are
+ specially sensible on variables with a range between 0 and 1.
  
- Both urdfdom_headers and urdfdom now have an extensive set of unit test
- which in the case of urdfdom are also run in a European (ie Dutch)
- locale [6]. Together with the small and homogeneous user base,
- application mostly in research and the fact that most of the library is
- (for unknown reasons) almost header-only make me estimate that scope,
- potential and impact of regressions introduced by this upgrade would be
- extremely low.
+ * The URDF schema defines doubles in URDF as xs:double. Looking at the
+ XSD document it says that the mantissa for a double is represented as a
+ "decimal" number. And looking at the XSD document a decimal number is a
+ "finite-length sequence of decimal digits (#x30-#x39) separated by a
+ period as a decimal indicator". Thus, the locale should have no effect
+ on how the document is parsed, and using std::stod is incorrect. This
+ patch switches the Vector3 class to using the stream operator, which
+ seems to ignore locale.
  
- 1: 
https://github.com/ros/urdfdom/commit/3dc7ee812827cc69ffa457ef01fe7b9623096aed
- 2: 
https://github.com/ros/urdfdom_headers/commit/9d2b421f3fcbc2a32af40b99ebd9c2cb2d088fb9
- 3: https://github.com/ros/urdfdom_headers/pull/42
- 4: https://github.com/ros/urdfdom/pull/105
- 5: https://github.com/ros/urdfdom_headers/pull/47
- 6: https://github.com/ros/urdfdom/pull/115
+ * urdfdom-headers is a key part for the largest open source robotics
+ framework, ROS (Robot Operative System). So it potentially affects a big
+ part of the robotics open source community. We (the devs and maintainers
+ of ROS have been receiving many different issues or bugs coming from
+ this problem, as Simon wrote in the initial post of this bug.
+ 
+ [Test Case]
+ 
+ * We have prepared a test case that demonstrate the problem and the fix. 
Patched packages for both urdfdom and urdfdom_headers are in this ppa:
+ https://launchpad.net/~j-rivero/+archive/ubuntu/urdfdom-headers-sru2/+packages
+ 
+ * The dockerfile here 
https://github.com/j-rivero/sru_urdfdom/blob/master/Dockerfile tries to 
demonstrate the following:
+  - Setup the test case, install packages
+  - Import locale test from the latest development of urdfdom repo
+  - Run tests, failed (demonstration of the bug)
+  - Setup the PPA, install new version of packages
+  - Run test, success (demonstration of the fix)
+ 
+ * This is the testing build of the dockerfile
+ https://build.osrfoundation.org/job/_urdfdom_sru/15/console
+ 
+ [Regression Potential]
+ 
+ * The change affected the result of parsed values from using stof/stod
+ functions to use stringstream. Although the patch is not small, the same
+ pattern is replied on every chunk of code changed. Standard use case of
+ users setting up digits in the form of integer or double is unlikely to
+ generate big regressions. Alternative use cases of users with weird
+ values in the input would trigger an exception from the code. This is no
+ different than the exceptions thrown by previous stof/stod funtions
+ (std::invalid_argument or std::out_of_range).
+ 
+ * The bug was reported in Nov 2017
+ (https://github.com/ros/urdfdom_headers/issues/41) the ROS community and
+ fixes landed in upstream repositories few weeks after. Many users from
+ different countries have been using new versions or these patches since
+ them, some of them are commenting/voting in this bug. Note that we were
+ also playing with upstream test suite to build the test case and no
+ regression was found in there.
+ 
+ [Other Info]
+ 
+ * Upstream releases new patched versions with the fix that I’ve included
+ into Debian Sid and have been synced by Ubuntu starting from Disco:
+ 1.0.3-1
+ 
+ * debdiffs for versions from the PPA:
+  - urdfdom debdiff:
+    https://gist.github.com/j-rivero/9983dddc6dbbea99cd3c39774f1d0498
+ 
+  - urdfdom-headers debdiff
+    https://gist.github.com/j-rivero/bc563620802d78129d775b2d5aee69ac
+ 
+ https://github.com/ros/urdfdom/commit/3dc7ee812827cc69ffa457ef01fe7b9623096aed
+ 
https://github.com/ros/urdfdom_headers/commit/9d2b421f3fcbc2a32af40b99ebd9c2cb2d088fb9
+ https://github.com/ros/urdfdom_headers/pull/42
+ https://github.com/ros/urdfdom/pull/105
+ https://github.com/ros/urdfdom_headers/pull/47
+ https://github.com/ros/urdfdom/pull/115
  
  See also the following upstream bug reports:
  https://github.com/ros/urdfdom_headers/issues/45
  https://github.com/ros/urdfdom/issues/119
  
  and a few downstream bug reports to the ubuntu package:
  https://github.com/ros-planning/moveit/issues/1333
  https://github.com/ros/urdf/issues/21
  https://github.com/ros-visualization/rviz/issues/1249
  https://github.com/ros-visualization/rviz/issues/1151
  https://github.com/ros-planning/moveit/issues/1050
  https://github.com/ros-visualization/rviz/issues/1298

** Also affects: urdfdom-headers (Ubuntu Bionic)
   Importance: Undecided
       Status: New

** Also affects: urdfdom (Ubuntu Bionic)
   Importance: Undecided
       Status: New

** Changed in: urdfdom (Ubuntu)
       Status: Confirmed => Fix Released

** Changed in: urdfdom-headers (Ubuntu)
       Status: Confirmed => Fix Released

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1817595

Title:
  [SRU] urdfdom-headers and urdfdom should not use locale dependent
  parsing for floating point numbers

To manage notifications about this bug go to:
https://bugs.launchpad.net/urdfdom-headers/+bug/1817595/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to