Inappropriate Whitespace Style
Description
Inappropriate Whitespace Style occurs when source code contains whitespace that is inconsistent across the code or does not follow expected standards for the product. This includes inconsistent indentation (mixing tabs and spaces), varying numbers of spaces for indentation, inconsistent spacing around operators, irregular line lengths, and non-standard blank line usage. Inconsistent whitespace makes code harder to read, understand, and maintain, and can mask control flow issues that lead to security vulnerabilities.
Risk
Inappropriate whitespace styles have indirect but potentially severe security implications. The most notable example is the Apple "goto fail" vulnerability (CVE-2014-1266), where inconsistent indentation masked a critical control flow bug. Auditors may incorrectly assume indentation reflects actual control flow, leading to missed vulnerabilities. Merge conflicts are more common with inconsistent whitespace, potentially introducing errors. Code review becomes more difficult when formatting is inconsistent. Automated analysis tools may produce inconsistent results. Security-critical code sections may be harder to identify and review properly.
Solution
Establish and enforce consistent whitespace standards across the project. Choose either tabs or spaces and use them consistently. Define standard indentation width (e.g., 2 or 4 spaces). Use automated formatters (Prettier, Black, gofmt, clang-format) to enforce consistency. Configure editor settings to match project standards. Use pre-commit hooks to check whitespace consistency. Always use braces for control structures to avoid indentation-related bugs. Document whitespace standards in project guidelines. Use linting tools to detect whitespace inconsistencies. Review whitespace during code reviews.
Common Consequences
| Impact | Details |
|---|---|
| Other | Scope: Other Increase Analytical Complexity - Auditors might incorrectly assume indentation reflects actual control flow, complicating vulnerability detection. |
| Other | Scope: Other Reduce Maintainability - Poor whitespace makes code harder to understand and maintain, indirectly affecting security. |
Example Code
Vulnerable Code
// Vulnerable: The infamous "goto fail" pattern (similar to CVE-2014-1266)
// Inconsistent indentation masks critical control flow bug
static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams,
uint8_t *signature, UInt16 signatureLen)
{
OSStatus err;
// Inconsistent indentation throughout
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail; // CRITICAL BUG: This always executes due to missing braces!
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
// The code after the duplicate "goto fail" is unreachable
// SSL certificate validation is bypassed!
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err;
}
# Vulnerable: Python with inconsistent whitespace
def process_user_input(data):
# Mix of tabs and spaces - causes IndentationError in Python 3
# or silent bugs in Python 2
if data.is_valid: # Tab here
process(data) # Spaces here
# Inconsistent indentation levels
if user.is_admin:
delete_all() # 2 spaces
else:
log_attempt() # 4 spaces
# Inconsistent spacing around operators
total=price* quantity+tax
discount = total * 0.1
# Security check with misleading indentation
if not authenticated:
return error
log_intrusion() # This looks like it's in the if block
# but Python sees it as unreachable code
// Vulnerable: JavaScript with inconsistent whitespace
function validateUser(user) {
// Inconsistent indentation
if (user.isAdmin) {
grantAllAccess(user); // 12 spaces
}
else{ // No space before brace
revokeAccess(user); // 6 spaces
}
// Misleading indentation (JavaScript ignores whitespace)
if (isSecureContext)
validateToken();
authorizeRequest(); // ALWAYS RUNS - not inside if!
// Mixed tabs and spaces
if (user.authenticated) { // Tab
processRequest(); // Spaces
}
// Inconsistent line spacing
sensitiveOperation1();sensitiveOperation2(); // Hard to review
sensitiveOperation3();
sensitiveOperation4(); // Excessive blank lines
}
// Vulnerable: Java with whitespace issues
public class VulnerablePaymentProcessor {
// Inconsistent method spacing
public void processPayment(Payment p){ // No space before brace
// Security check with misleading indentation
if (p.isVerified())
validateAmount(p);
processTransaction(p); // ALWAYS RUNS - not in if block!
// Inconsistent operator spacing
double total=p.amount*1.1+fee;
double discount= total *0.05;
// Long lines that wrap poorly
if (user.hasPermission("admin") && payment.isVerified() && !payment.isFlagged() && securityContext.isActive()) { doAdminStuff(); }
}
public void refund( Payment p ) { // Inconsistent parameter spacing
// ...
}
}
Fixed Code
// Fixed: Consistent whitespace and always using braces
static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams,
uint8_t *signature, UInt16 signatureLen)
{
OSStatus err;
// Consistent 4-space indentation throughout
// Always use braces for control structures
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) {
goto fail;
}
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) {
goto fail;
}
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) {
goto fail;
}
// Verify the signature
err = SSLVerifySignature(ctx, isRsa, &hashOut, signature, signatureLen);
if (err != 0) {
goto fail;
}
err = 0; // Success
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err;
}
# Fixed: Consistent Python whitespace (PEP 8 compliant)
def process_user_input(data):
"""Process user input with proper validation."""
# Consistent 4-space indentation (no tabs)
if data.is_valid:
process(data)
# Consistent indentation levels
if user.is_admin:
delete_all()
else:
log_attempt()
# Consistent spacing around operators (PEP 8)
total = price * quantity + tax
discount = total * 0.1
# Clear control flow with proper structure
if not authenticated:
log_intrusion() # Clearly inside the if block
return error
# Continue processing for authenticated users
return success
// Fixed: Consistent JavaScript whitespace
function validateUser(user) {
// Consistent 4-space indentation
if (user.isAdmin) {
grantAllAccess(user);
} else {
revokeAccess(user);
}
// Always use braces for clarity
if (isSecureContext) {
validateToken();
}
authorizeRequest(); // Clearly separate from the if block
// Consistent formatting
if (user.authenticated) {
processRequest();
}
// One statement per line for readability
sensitiveOperation1();
sensitiveOperation2();
sensitiveOperation3();
sensitiveOperation4();
}
// Fixed: Consistent Java whitespace
public class FixedPaymentProcessor {
/**
* Process a payment transaction.
*
* @param payment The payment to process
*/
public void processPayment(Payment payment) {
// Always use braces - prevents accidental code outside blocks
if (payment.isVerified()) {
validateAmount(payment);
processTransaction(payment);
}
// Consistent operator spacing
double total = payment.amount * 1.1 + fee;
double discount = total * 0.05;
// Break long lines for readability
boolean canProcess = user.hasPermission("admin")
&& payment.isVerified()
&& !payment.isFlagged()
&& securityContext.isActive();
if (canProcess) {
doAdminStuff();
}
}
public void refund(Payment payment) {
// Consistent parameter spacing (no extra spaces)
// ...
}
}
CVE Examples
CVE-2014-1266 (Apple "goto fail"): While primarily a logic error, the misleading whitespace/indentation in Apple's SSL implementation made the duplicate "goto fail" statement harder to detect during code review. The code appeared to show the second "goto fail" inside an if block, when in fact it was unconditionally executed, bypassing SSL certificate validation.
Related CWEs
- CWE-1078: Inappropriate Source Code Style or Formatting (parent)
- CWE-1006: Bad Coding Practices (category member)
- CWE-1113: Inappropriate Comment Style (related)
- CWE-483: Incorrect Block Delimitation (related - consequence of misleading whitespace)
References
- MITRE Corporation. "CWE-1114: Inappropriate Whitespace Style." https://cwe.mitre.org/data/definitions/1114.html
- CVE-2014-1266 - Apple SSL/TLS Bug
- PEP 8 - Style Guide for Python Code
- Google Style Guides (various languages)