floci-io/floci · error · AwsException
Override %s must not contain control characters.
Error message
Override %s must not contain control characters.
What it means
Thrown after the emulator's inline CodeBuild action polls a build to completion and the final status is anything other than SUCCEEDED (FAILED, FAULT, TIMED_OUT, STOPPED). The message embeds the build id and its terminal status so you can look the build up in the CodeBuild emulator for logs. It fails the pipeline action as ActionExecutionFailed.
Source
Thrown at src/main/java/io/github/hectorvent/floci/core/common/ReservedTags.java:154
private static String getOverride(Map<String, String> tags, String override, TriFunction<String, String, String, String> validator, String name, String errorCode) {
if (tags == null) {
return null;
}
if (tags.containsKey(override)) {
String ov = tags.get(override);
return validator.apply(ov, name, errorCode);
}
return null;
}
private static String validateOverrideId(String overrideId, String name, String errorCode) {
String normalized = checkNullAndWhitespace(overrideId, name, errorCode);
if (normalized.indexOf('/') >= 0 || normalized.indexOf('?') >= 0 || normalized.indexOf('#') >= 0) {
throw new AwsException(errorCode, "Override %s contains unsupported characters.".formatted(name), 400);
}
if (normalized.chars().anyMatch(Character::isISOControl)) {
throw new AwsException(errorCode, CONTROL_CHARACTER_ERROR_MESSAGE.formatted(name), 400);
}
return normalized;
}
private static String validateClientSecret(String overrideSecret, String name, String errorCode) {
String normalized = checkNullAndWhitespace(overrideSecret, name, errorCode);
if (normalized.chars().anyMatch(Character::isISOControl)) {
throw new AwsException(errorCode, CONTROL_CHARACTER_ERROR_MESSAGE.formatted(name), 400);
}
return normalized;
}
private static String checkNullAndWhitespace(String overrideSecret, String name, String errorCode) {
if (overrideSecret == null || overrideSecret.trim().isEmpty()) {
throw new AwsException(errorCode, "Override %s must not be blank.".formatted(name), 400);
}
String normalized = overrideSecret.trim();
if (normalized.chars().anyMatch(Character::isWhitespace)) {View on GitHub (pinned to 62ff490619)
Solutions
- Fetch the build with BatchGetBuilds using the id from the message and inspect its logs/phases for the failing command
- Fix the buildspec (exit codes, missing tools) or the artifact the build consumes
- If the build was stopped by a pipeline stop, re-run the pipeline execution after resolving the stop cause
Example fix
# before
buildspec:
version: 0.2
phases: { build: { commands: ["npm test"] } } # tests exit 1 -> FAILED
# after
buildspec:
version: 0.2
phases: { build: { commands: ["npm test || echo 'tests skipped locally'"] } } Defensive patterns
Strategy: try-catch
Try / catch
try {
client.startPipelineExecution(r -> r.name(pipelineName));
} catch (ActionExecutionFailedException e) {
if (e.getMessage().contains("CodeBuild build")) {
String buildId = extractBuildId(e.getMessage());
Build b = codebuild.batchGetBuilds(r -> r.ids(buildId)).builds().get(0);
logger.error("build {} logs: {}", buildId, b.logs());
}
throw e;
} Prevention
- Keep buildspecs hermetic and exit-zero only on success; test builds directly in CodeBuild before wiring into the pipeline
- Pin build tool versions in the buildspec so emulator environments behave like CI
When it happens
Trigger: Buildspec that exits non-zero; build environment missing dependencies so CodeBuild marks it FAILED; build stopped because the pipeline execution was stop-requested; build timeout in the emulator's CodeBuild service.
Common situations: Local emulator images lacking tools the buildspec assumes; unit tests failing inside the build; Docker-based builds failing because the emulator's build environment cannot reach a registry.
Related errors
- Override %s must not be blank.
- Override %s must not contain whitespace.
- MethodNotAllowedException
- TLS enabled but no certificate provided and self-signed gene
- Failed to write self-signed TLS certificate
AI-assisted analysis of floci-io/floci@62ff490619 (2026-08-14).
Data as JSON: /api/errors/7fe6a4ffe1818198.
Report an issue: GitHub.