On 5/9/2025 3:02 PM, Burakov, Anatoly wrote:
On 5/8/2025 3:16 PM, Anatoly Burakov wrote:
Remove custom number parser and use C standard library instead. In order to
keep compatibility with earlier versions of the parser, we have to take
into account a couple of quirks:

- We did not consider "negative" numbers to be valid for anything other
   than base-10 numbers, whereas C standard library does. Adjust the tests
   to match the new behavior.
- We did not consider numbers such as "+4" to be valid, whereas C
   standard library does. Adjust the tests to match the new behavior.
- C standard library's strtoull does not do range checks on negative
   numbers, so we have to parse knowingly-negative numbers as signed.
- C standard library does not support binary numbers, so we keep around the    relevant parts of the custom parser in place to support binary numbers.

Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com>
---

Notes:
     v7 -> v8:
     - Added the commented-out out-of-bounds check back
     - Replaced debug print messages to ensure they don't attempt to
       index the num_help[] array (should fix compile errors)
     v5 -> v6:
     - Allowed more negative numbers (such as negative octals or hex)
     - Updated unit tests to check new cases
     - Small refactoring of code to reduce amount of noise
     - More verbose debug output
     v4 -> v5:
     - Added this commit

There is a unit test failure coming specifically from this commit, that only happens on ARM. Log:

Error: parsing -0b0111010101 as INT16 succeeded!

That is, when confronted with a negative binary string, it seems that strtoll will report success, whereas other platforms report failure. I'm confused, is libc strtoll different on ARM? I don't have an ARM platform available to test this so I don't know why this is happening.


Correction: it seems that newer libc versions have added support for binary formats. I'll therefore amend the tests to account for that.

--
Thanks,
Anatoly

Reply via email to