This is an archived snapshot of W3C's public bugzilla bug tracker, decommissioned in April 2019. Please see the home page for more details.
"remaining" is set to "string" in step 2, and never modified, so all the escape sequences are decoded looking at the first two characters. :-) You probably want to define the term somehow, rather than setting its value ("let ... be ..."). (Compare this algorithm to other algorithms that use "let". We consistently use "let" to mean a static assignment action, rather than a general definition.)
Same problem with "c". You defined "pointer" ok, because you "let pointer be ... zero", and then you modify its value explicitly.
https://github.com/whatwg/url/commit/4a0d68acecacc27d1b87fdde8b388cd4048d6f37 I defined them as generic parser concepts now.