The main problem with this is the author decided that s1, s2, and s3 were good variable names. That happens in every language. It could use some more comments, and some of the sections are written in a somewhat old style (really? not using strndup?), but it's a perfectly normal parser algorithm that is perfectly understandable to anyone who understands basic C.
Anyone who struggles with this code probably doesn't actually understand pointers and memory.
RT: https://shrimpposter.club/objects/fd58d477-cde4-465c-acb5-23501760f329