What I think in addition to what Atkinso writes: If you just strip arbitrary bytes that happen to be equal in value to the numeric value of ASCII control characters or whitespace, how can you be sure that you don’t destroy valid non-whitespace unicode symbols?

You can’t! This will work only of you have actually ASCII input.

  • @Kissaki@programming.dev
    link
    fedilink
    English
    6
    edit-2
    2 days ago

    The link is broken. Looks like code was accidentally pasted there.

    https://lukasatkinson.de/2025/net-negative-cursor/%20%20%20%20let%20mut%20bytes%20=%20vec![0u8;%20len%20as%20usize];%20%20%20%20buf.read_exact(&mut%20bytes)?%3B++++++++%2F%2F+Sanitize+control+characters+++++let+sanitized_bytes%3A+Vec%3Cu8%3E+=+bytes.into_iter%28%29+++++++++.filter%28%7C&b%7C+b+%3E=+32+%7C%7C+b+%3D%3D+9+%7C%7C+b+%3D%3D+10+%7C%7C+b+%3D%3D+13%29+%2F%2F+Allow+space%2C+tab%2C+newline%2C+carriage+return++++.collect%28%29%3B
    

    404 Page Not Found
    The page you have requested does not exist. Would you like to visit the start page?

    Cleaned up link: https://lukasatkinson.de/2025/net-negative-cursor/

  • @HaraldvonBlauzahn@feddit.orgOP
    link
    fedilink
    22 days ago
    
    let mut bytes = vec![0u8; len as usize];
        buf.read_exact(&mut bytes)?;
    
    // Sanitize control characters
    let sanitized_bytes: Vec<u8> = bytes.into_iter()
        .filter(|&b| b >= 32 || b == 9 || b == 10 || b == 13) // Allow space, tab, newline, carriage return
        .collect();
    
    
    

    This implicitly, and wrongly, swaps the interpretation of the input from UTF8 text to pure ASCII.

    • setsubyou
      link
      fedilink
      62 days ago

      In UTF8, all bytes that are not an ASCII character have the high bit set.

      • @HaraldvonBlauzahn@feddit.orgOP
        link
        fedilink
        12 days ago

        You are right with this. But still, in Rust, a vector of u8 is different from a sequence of unicode characters. This would not work in Python3 either, while it’d work in Python2.

        • @brian@programming.dev
          link
          fedilink
          2
          edit-2
          2 days ago

          yeah it’s incorrect bc it destroys multibyte characters, but no idea what you’re saying about u8 being a different type from unicode. the original code was reading bytes and converting them too? the typing isn’t the issue, you can still store utf8 as a series of bytes

          • @Markaos@discuss.tchncs.de
            link
            fedilink
            12 days ago

            it’s incorrect bc it destroys multibyte characters

            It doesn’t. As the poster two levels up said, all bytes that don’t represent an ASCII character have the high bit set, even the follow-up bytes in multibyte sequences. So the condition b >= 32 will match and preserve them.