What does "arbitrary strings" mean for user properties?

The OpenZFS docs say this:

The values of user properties are arbitrary strings, are always inherited, and are never validated.

What does “arbitrary strings” mean here? Are they C strings, i.e. internally null terminated? Or can they also contain null bytes?

Some context: I’m trying to re-implement syncoid’s --preserve-properties, but properly deal with tab and newline characters in user properties.