Shell helpers like echo usually append a line ending to piped stdin. We treat a single trailing LF or CRLF as suspicious, but avoid flagging values that are clearly multiline.
(value string)
| 264 | // treat a single trailing LF or CRLF as suspicious, but avoid flagging values |
| 265 | // that are clearly multiline. |
| 266 | func hasSuspiciousTrailingNewline(value string) bool { |
| 267 | switch { |
| 268 | case strings.HasSuffix(value, "\r\n"): |
| 269 | trimmed := strings.TrimSuffix(value, "\r\n") |
| 270 | return !strings.ContainsAny(trimmed, "\r\n") |
| 271 | case strings.HasSuffix(value, "\n"): |
| 272 | trimmed := strings.TrimSuffix(value, "\n") |
| 273 | return !strings.ContainsAny(trimmed, "\r\n") |
| 274 | case strings.HasSuffix(value, "\r"): |
| 275 | trimmed := strings.TrimSuffix(value, "\r") |
| 276 | return !strings.ContainsAny(trimmed, "\r\n") |
| 277 | default: |
| 278 | return false |
| 279 | } |
| 280 | } |
| 281 | |
| 282 | func warnSuspiciousTrailingNewline(w io.Writer, value string) { |
| 283 | if !hasSuspiciousTrailingNewline(value) { |
no outgoing calls