p1: /v2/scrape, /v1/fetch, auth, CLI, contract tests
Single Fetcher.Fetch on the Guard that holds DenyPrefixes. skipTlsVerification is ignored. No 502. keys add writes the secret only to --out. Release binary has no -test-allow-prefix.
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
package collapse
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
func byteSliceToString(b []byte) string {
|
||||
/* #nosec G103 */
|
||||
return *(*string)(unsafe.Pointer(&b))
|
||||
}
|
||||
|
||||
func replaceAnyWhitespaceWithSpace(source string) string {
|
||||
if source == "" {
|
||||
return source
|
||||
}
|
||||
|
||||
// Some performance optimizations:
|
||||
// - If no replacement was done, we return the original slice and dont allocate.
|
||||
// - We batch appends
|
||||
var ret []byte
|
||||
makeIfNeeded := func() {
|
||||
if ret == nil {
|
||||
ret = make([]byte, 0, len(source))
|
||||
}
|
||||
}
|
||||
|
||||
startNormal := 0
|
||||
startMatch := -1
|
||||
for i := 0; i < len(source); i++ {
|
||||
isWhitespace := source[i] == ' ' || source[i] == '\r' || source[i] == '\n' || source[i] == '\t'
|
||||
|
||||
if startMatch == -1 && isWhitespace {
|
||||
// Start of newlines
|
||||
startMatch = i
|
||||
continue
|
||||
} else if startMatch != -1 && isWhitespace {
|
||||
// Middle of newlines
|
||||
continue
|
||||
} else if startMatch != -1 {
|
||||
// Character after the last newline character
|
||||
|
||||
count := i - startMatch
|
||||
if count == 1 && source[startMatch] == ' ' {
|
||||
// There was only one `isWhitespace` match & that is a space.
|
||||
// So the replacement would be exactly the same...
|
||||
} else {
|
||||
makeIfNeeded()
|
||||
ret = append(ret, source[startNormal:startMatch]...)
|
||||
ret = append(ret, byte(' '))
|
||||
startNormal = i
|
||||
}
|
||||
|
||||
startMatch = -1
|
||||
}
|
||||
}
|
||||
|
||||
if startMatch == -1 && startNormal == 0 {
|
||||
// a) no changes need to be done
|
||||
} else if startMatch == -1 {
|
||||
// b) Only the normal characters until the end still need to be added
|
||||
makeIfNeeded()
|
||||
ret = append(ret, source[startNormal:]...)
|
||||
} else if ret == nil && len(source)-startMatch == 1 && source[startMatch] == ' ' {
|
||||
// c) There is a match, but it is exactly the same as the replacement
|
||||
// If there is no new slice, we can skip the replacement.
|
||||
} else {
|
||||
// d) The match still needs to be replaced (and possible the previous normal characters be added)
|
||||
makeIfNeeded()
|
||||
ret = append(ret, source[startNormal:startMatch]...)
|
||||
ret = append(ret, byte(' '))
|
||||
}
|
||||
|
||||
if ret == nil {
|
||||
// Huray, we did not do any allocations with make()
|
||||
// and instead just return the original slice.
|
||||
return source
|
||||
}
|
||||
return byteSliceToString(ret)
|
||||
}
|
||||
Reference in New Issue
Block a user