bastibe/SoundCard

Decode error in _CoreAudio.CFString_to_str

KoharuYuzuki opened this issue · 2 comments

First of all I apologize that I am not good at English.

In the following environment, attempting to print() the result of soundcard.all_speakers() or soundcard.all_microphones() may result in a decoding error.

=== environment ===
OS: macOS 12.3.1
Chip: M1
Memory: 8GB

=== code ===
import soundcard
speakers = soundcard.all_speakers()
print(speakers)

=== error ===
File "/.../soundcard/coreaudio.py", line 134, in name
return _CoreAudio.CFString_to_str(name)
File "/.../soundcard/coreaudio.py", line 297, in CFString_to_str
assert err == 1, "Could not decode string"

The cause of the error appears to be insufficient buffer size when trying to decode characters such as Japanese.
As a test, I multiplied str_length by 4, and the error no longer occurred.

This issue may be helpful.
curl/curl#1823

Thank you.

Thank you for reporting and analysing this issue!

UTF-8 should never use more than four bytes per character, so a four-times overcommit should always work. Would you like to contribute the change as a pull request?

Yes, I have created a pull request.