Load: Fix signed integer limit error. #179
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When loading signed integer in
cyaml__read_int()
, themin
tomax
range is set to only half of the supposed value:int8_t
: -64 to 63short
: -16384 to 16383int
: -2^30 to 2^30-1long
: -2^62 to 2^62-1So if the data type is
short
, a value like 20000 or -20000 in the YAML file will cause:libcyaml: ERROR: Load: Invalid INT value: '20000'
Should use
UINT64_MAX
instead ofINT64_MAX
in the shift, like that in this pull request. Another solution is do not divide the value by 2:max = (INT64_MAX >> ((8 - schema->data_size) * 8));