Skip to content

Commit

Permalink
Do not depend on the evaluation order of C arguments
Browse files Browse the repository at this point in the history
The evaluation order of C arguments is unspecified.
`RSTRING_LEN(value)` would fail if the conversion to a String by
`StringValuePtr(value)` is not done yet.

Coverity Scan found this issue.
  • Loading branch information
mame committed Nov 29, 2024
1 parent ffc4e98 commit d1e6bf3
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion ext/psych/psych_emitter.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,11 +304,12 @@ static VALUE scalar(
tag = rb_str_export_to_enc(tag, encoding);
}

const char *value_ptr = StringValuePtr(value);
yaml_scalar_event_initialize(
&event,
(yaml_char_t *)(NIL_P(anchor) ? NULL : StringValueCStr(anchor)),
(yaml_char_t *)(NIL_P(tag) ? NULL : StringValueCStr(tag)),
(yaml_char_t*)StringValuePtr(value),
(yaml_char_t*)value_ptr,
(int)RSTRING_LEN(value),
plain ? 1 : 0,
quoted ? 1 : 0,
Expand Down

0 comments on commit d1e6bf3

Please sign in to comment.