Debugging - sgml/signature GitHub Wiki
Classes of Errors
Loop Anti-Patterns
Error Class | Description | Loop-Free Benefit |
---|---|---|
Iteration Drift | Logic unintentionally applies to more elements than intended | Direct access enforces scope and prevents overreach |
Silent Skips | Empty iterables or filtered comprehensions yield no output without warning | Index-based access fails loudly or forces explicit fallback |
Type Ambiguity | Mixed-type entries cause runtime errors or inconsistent behavior | Manual access allows per-field validation before use |
Order Non-Determinism | Dict iteration order (pre-3.7) or unordered sets yield unstable results | Explicit keys ensure deterministic access |
Scope Leakage | Comprehension variables leak into outer scope (pre-Python 3.x) | No comprehension = no leakage risk |
Overgeneralization | Logic applies broadly when only specific cases are valid | Hardcoded index/key access enforces narrow logic paths |
Side Effect Contamination | Loop bodies may trigger unintended mutations or I/O | Loop-free logic isolates side effects to explicit calls |
Unbounded Execution Risk | Loops over large or dynamic structures may cause performance issues | Loop removal bounds execution to known, fixed paths |
False Positives in Validation | Comprehensions may match partial or malformed entries | Manual checks enforce structural integrity |
Language Features That Eliminate Ambiguity Classes (1980–1990)
Language Feature | Language | Year | Eliminated Ambiguity Class | Notes |
---|---|---|---|---|
Everything is a string | Tcl | 1988 | Type coercion ambiguity | Uniform string representation avoids implicit casting |
Structured exception model | Ada | 1980 | Error recovery ambiguity | Explicit begin...exception blocks clarify control flow |
Capability-based security | EROS (OS model) | 1980s | Auth ambiguity | Authority is explicitly granted; no ambient access |
Declarative concurrency | Concurrent Prolog | 1981 | State ambiguity | Logic-driven execution avoids race conditions and hidden state |
Explicit message passing | Erlang | 1986 | State and scope ambiguity | Isolated processes communicate via messages; no shared memory |
Strategies for Living with Frozen Ambiguity
Strategy | Description |
---|---|
Behavioral documentation | Capture real-world behavior across platforms (e.g., browser matrix) |
Wrapper abstraction | Encapsulate legacy logic in controlled environments |
Deprecation signaling | Warn users/developers of ambiguous behavior zones |
Audit scaffolding | Build test cases that surface divergence explicitly |
Governance overlay | Define local rules to constrain ambiguity (e.g., disallow document() in XSLT) |
Case Study: XSLT 1.0 in Browsers
Aspect | Ambiguity Description |
---|---|
Whitespace handling | Inconsistent whitespace normalization across browser engines |
Extension functions | Varying support for vendor-specific or EXSLT extensions; no fallback mechanism |
Error recovery | Silent failure in some engines vs verbose error in others; no spec-mandated behavior |
Security model | No integration with CSP; document() can bypass origin restrictions |
Encoding assumptions | UTF-8 vs UTF-16 vs platform default; no consistent enforcement across environments |
Strategies for REST API False Positives and False Negatives
Minimalist Client-Side TOCTOU Mitigations (Frozen API, No UI or Retry)
Strategy | Description | Notes |
---|---|---|
Interpret 404/401 as ambiguous | Treat login failure immediately after creation as potentially transient | Avoids false error classification; no user-facing change |
Encode creation metadata locally | Store timestamp or flag when user is created; use it to contextualize login errors | Enables internal logic to distinguish new-user edge cases |
Suppress error escalation | Prevent 404/401 from triggering alerts, logs, or workflows prematurely | Reduces noise and false positives in monitoring systems |
Log correlation ID across flows | Attach shared ID to creation and login requests; log for postmortem analysis | Enables forensic tracing without backend support |
Annotate internal state | Mark login attempt as “post-creation” in client telemetry or audit logs | Supports governance and debugging without altering UX |
REST API Limits That Cause False Positives / False Negatives
Limit Type | False Positive Risk | False Negative Risk | Notes |
---|---|---|---|
Rate limiting (per IP/key) | Legitimate requests blocked as abusive | Malicious clients rotate IPs to evade detection | Common with HTTP 429 responses; Retry-After headers may be ignored |
Resource quota limits | Valid operations rejected due to quota exhaustion | Overuse not detected if quota tracking is delayed | Especially in multi-tenant or bursty usage models |
Time window enforcement | Requests near boundary misclassified (e.g., 59s vs 60s) | Requests outside window accepted due to clock drift | Depends on client/server clock sync |
Endpoint-specific limits | High-volume endpoint falsely flagged while others ignored | Abuse spread across low-limit endpoints undetected | Inconsistent enforcement across API surface |
Authentication throttling | Legitimate login attempts blocked after failed ones | Brute-force attempts succeed if throttling is bypassed | Often tied to 401/403 responses; risk of user lockout |
Caching layer limits | Stale cache causes outdated error responses | Fresh data missed due to cache bypass | Common in distributed systems with eventual consistency |
Payload size limits | Valid large payloads rejected | Oversized malicious payloads accepted if chunked | May trigger 413 errors inconsistently |
Header-based rate tracking | Clients spoof headers to evade limits | Legitimate clients misclassified due to missing headers | Especially with X-RateLimit-* headers |
FinTech API Falsy Summary Table
API / Feature | False Positive Risk | False Negative Risk | Mitigations | Workarounds | Anecdotes |
---|---|---|---|---|---|
Fraud Detection Models | Legitimate transactions flagged as suspicious | Fraudulent transactions missed due to model drift | Use transaction metadata enrichment | Contact PayPal Risk Ops for overrides | "We had a donor flagged for fraud because they used a VPN—PayPal reversed it after manual review." |
DoDirectPayment (Classic) | Valid credit card transactions rejected | Invalid cards accepted if validation bypassed | Migrate to REST-based Payments API | Retry with alternate funding source | "Classic API rejected AMEX cards intermittently—REST API worked fine." |
Authentication / Login APIs | User lockouts after failed attempts | Brute-force attempts succeed if throttling evaded | Implement client-side exponential backoff | Use OAuth token refresh instead of re-login | "Our mobile app locked users out after 3 failed logins—OAuth flow was more forgiving." |
Orders & Payments APIs | Valid payments rejected due to quota or timing | Duplicate or replayed payments accepted | Use PayPal-Request-Id for idempotency |
Monitor for duplicate webhook events | "We saw double charges when retries weren't idempotent—adding request ID fixed it." |
Sandbox Negative Testing | Simulated errors may not reflect live behavior | Real-world edge cases missed in test coverage | Validate against live API in low-risk mode | Use real $0.01 transactions for edge testing | "Sandbox let us simulate 500 errors, but live API returned 400 for same payload." |
Design Notes
- Fraud detection is opaque by design. PayPal rarely discloses exact heuristics, so developers must rely on metadata (IP, user agent, transaction history) to reduce false positives.
- Classic APIs (e.g., NVP/SOAP) are deprecated but still used in legacy systems. They exhibit inconsistent behavior across card networks and regions.
- Rate limits are not uniformly documented. Some endpoints return
429 Too Many Requests
, others silently fail or delay responses. - Sandbox behavior diverges from production. Negative testing tools simulate errors, but not all edge cases (e.g., network latency, real card declines) are reproducible.
Recommended Practices
- Always use idempotency keys (
PayPal-Request-Id
) to prevent duplicate transactions. - Implement client-side retry logic with exponential backoff and jitter.
- Monitor webhook delivery for duplicate or missing events—PayPal does not guarantee exactly-once delivery.
- Use live API with low-value transactions to validate edge behavior not covered in sandbox.
- Maintain a manual override process for fraud flags—especially for high-value or donor-related transactions.
References
- PayPal Developer Docs
- Negative Testing Tool
- PayPal Community Forums
- GitHub Discussions on PayPal SDKs
API Anti-Design
Anti-Pattern | Design Insight | OWASP Resource |
---|---|---|
Overreliance on RESULT Code | NVP responses lack schema; RESULT=0 ≠ success. Must parse RESPMSG , AVS , etc. |
ASVS 5.0 - Input Validation & Response Handling |
Ignoring AVS/CVV2 advisory flags | AVS/CVV2 codes are advisory; must be interpreted in context of issuer behavior. | AVS & CVD Explanation – Chase |
Hardcoded error handling logic | Fraud codes evolve; brittle logic fails silently. Use explicit mappings. | OWASP ASVS - Error Handling |
Firewall ACL drift | PayPal IPs change; static ACLs cause silent drops. | OWASP WSTG - Configuration Management |
SDK version mismatch | Legacy SDKs (e.g., pfpro.exe ) may not support TLS 1.2+. |
OWASP ASVS - Dependency Management |
No idempotency enforcement | Retry logic without PayPal-Request-Id causes duplicate charges. |
OWASP BLA8:2025 - Replays of Idempotency Operations |
Sandbox/live divergence | Sandbox lacks full fraud filters, AVS/CVV2 enforcement, and issuer behavior. | OWASP WSTG - Environment Parity Testing |
Anti-Documentation
Phenomenon | Description | Related Concept / Source | Remediation(s) |
---|---|---|---|
Documentation Bloat | Excessive, redundant, or poorly maintained docs that overwhelm rather than inform. | OWASP ASVS - V1.1: Secure Architecture | Consolidate into modular, versioned docs with clear ownership and update cycles. |
Doc Fog | Dense, unclear, or contradictory documentation that obscures operational clarity. | OWASP WSTG - Configuration and Deployment Management | Use structured templates, glossary enforcement, and example-driven clarity. |
Cargo Cult Documentation | Superficial or ritualistic docs that mimic structure without conveying insight. | OWASP BLA10:2025 - Ritualistic Controls | Audit for actionable content; remove placeholders and legacy cruft. |
Quantity-over-Quality Trap | Prioritizing volume over clarity, accuracy, or usability. | Wharton: AI and Innovation | Implement doc linting, usability testing, and reader feedback loops. |
Innovation Bubble (Docs Edition) | Inflated perception of maturity due to doc volume masking fragility. | Springer: Innovation Bubbles | Align documentation with actual support levels, SDK maturity, and SLA guarantees. |
Misconceptions Leading to Security and Requirement Gaps
Misconception | Description | Security Gap Introduced | Requirement Gap Introduced | Remediation(s) |
---|---|---|---|---|
Types prevent all runtime errors | Belief that static types eliminate nulls, bounds, or logic errors | Null dereference, unchecked exceptions | Missed runtime constraints (e.g., length, format) | Combine types with runtime validation (e.g., schema + type) |
Static analysis guarantees correctness | Assuming static tools catch all bugs or logic flaws | False negatives in taint tracking, auth flows | Overconfidence in tool coverage | Use static analysis as advisory, not definitive |
Strong typing implies secure behavior | Equating type safety with security guarantees | Type-safe code still vulnerable to injection | Misaligned assumptions about trust boundaries | Layer types with input sanitization and capability checks |
Type coverage equals test coverage | Assuming type annotations replace behavioral testing | Logic bugs pass type checks | Missing edge cases, state transitions | Maintain separate behavioral test suite |
Type systems enforce business rules | Expecting types to encode domain logic (e.g., payment limits, roles) | Privilege escalation, policy bypass | Business logic not enforced at runtime | Encode rules in runtime policy engine or DSL |
Static types prevent TOCTOU | Belief that types eliminate race conditions or timing issues | TOCTOU vulnerabilities persist | Misunderstanding of temporal constraints | Use concurrency-safe primitives and runtime guards |
Type errors are security errors | Treating all type mismatches as security risks | Overprioritization of low-risk issues | Misallocation of remediation effort | Prioritize based on exploitability, not type severity |
Type systems eliminate ambiguity | Assuming types clarify all semantics | Ambiguous coercion, overloading, shadowing | Misinterpretation of overloaded or dynamic behavior | Document coercion rules and shadowing behavior explicitly |
TOCTOU Operational Gaps and Exploitability
TOCTOU Scenario | Why Static Analysis Misses It | Type System Blind Spots | Bug Bounty Exploit Vector | Real-World Example / Pattern |
---|---|---|---|---|
Filesystem race (e.g., symlink swap) | File existence checked before use; race not modeled | Types don't encode temporal file state | Swap symlink between check and open | CVE-2015-1838 (Android ADB root via symlink race) |
AuthZ check before resource access | Tool sees check, not timing gap | Types treat auth as boolean, not time-bound | Replay or delay access to gain privilege | Delayed token invalidation in OAuth flows |
Lock acquired, then stale data used | Static tools don’t model concurrent memory access | Types don't encode freshness or lock scope | Use stale pointer or cache after lock release | Race in shared memory access in kernel modules |
Temp file created, then opened insecurely | Check and use are separate calls; tool sees them as safe | Types don't encode file lifecycle or atomicity | Replace temp file between creation and use | CVE-2019-3462 (APT temp file race) |
Permission check before action execution | Analysis assumes check is sufficient | Types don't encode privilege escalation vectors | Inject action after check but before execution | Web app privilege escalation via delayed role change |
State check before mutation | Tool sees state as static snapshot | Types don't encode state transitions or timing | Mutate state after check but before lock | Race in shopping cart quantity validation |
Bounties
TOCTOU Appeal in Bug Bounty Programs
Reason TOCTOU Is Favored | Description | Bounty Exploitability Factors | Bounty Anecdote / Case Study |
---|---|---|---|
Hard to detect statically | Most tools don’t model interleaved execution or race conditions | Low false positive rate; high novelty | HackerOne report: Symlink race in temp file upload bypassed ACLs—$5,000 payout |
Easy to demonstrate impact | Exploits often show privilege escalation, data corruption, or bypass | Clear PoC with visible escalation | Bugcrowd: TOCTOU in auth check allowed access to admin panel—$3,500 payout |
Misunderstood by developers | Devs assume checks are sufficient without atomic operations | Exploits persist across versions | GitHub Security Lab: Race in Git credential helper—patch took multiple iterations |
High payout potential | Often affects core flows (auth, file access, payments) | Severity scoring favors privilege escalation | HackerOne: TOCTOU in OAuth token revocation led to session hijack—$7,500 payout |
Cross-platform relevance | Affects web, mobile, desktop, and kernel-level systems | Broad applicability across bounty programs | Google VRP: Android ADB symlink race (CVE-2015-1838)—$10,000 payout |
Difficult to patch cleanly | Requires atomicity, not just additional checks | Patches often incomplete or regress | Mozilla Bugzilla: Race in file permission check reintroduced after refactor |
Often missed in code review | Reviewers focus on logic, not timing or concurrency | Exploits survive multiple audits | Shopify bounty: Race in inventory validation allowed overselling—$2,000 payout |
Can be chained with other bugs | TOCTOU often amplifies impact of logic or auth flaws | Enables multi-vector escalation | HackerOne: TOCTOU + IDOR allowed unauthorized invoice download—$4,200 payout |
Definitions of Key Terms in TOCTOU Governance Notes
Term | Definition | Operational Context in TOCTOU Analysis |
---|---|---|
Dynamic analysis | Runtime inspection of program behavior, often using instrumentation or monitoring | Reveals race conditions, timing gaps, and state inconsistencies |
Fuzzing | Automated input generation to explore edge cases and unexpected states | Can trigger TOCTOU races by stressing timing and concurrency |
Manual review | Human-led inspection of code or behavior, often focusing on logic and flow | Essential for spotting non-obvious TOCTOU flaws |
Impact | The severity and consequences of a vulnerability, often measured by data loss or privilege gain | High-impact TOCTOU flaws often affect auth, file, or payment flows |
Novelty | The uniqueness or creativity of the exploit, especially if it bypasses known defenses | TOCTOU exploits often score high due to subtle timing logic |
Atomic operations | Operations that complete entirely or not at all, without intermediate states | Prevent TOCTOU by eliminating race windows |
Capability-based access | Security model where access is granted via possession of unforgeable tokens or references | Reduces reliance on time-sensitive checks |
Sandboxing | Isolating code execution to limit its access to system resources | Mitigates TOCTOU impact by containing exploit scope |
Type guarantees | Assertions made by the type system about data structure and behavior | Useful for structure, but insufficient for timing or concurrency |
Static guarantees | Assertions made at compile-time via static analysis tools | Often miss runtime races and interleaved execution |
Bug Bounty Programs
- HackerOne
- Bugcrowd
- GitHub Security Lab
- Google Vulnerability Reward Program (VRP)
- Mozilla Bug Bounty Program
- Shopify HackerOne Program
- Google App Security Reward Program
Process
Lookup Method Names in code search:
sectDiv
newserializedata
fnOnCancel
fnOnSave
Lookup Error strings in Github issues:
https://github.com/webpack/webpack-dev-server/issues/964 https://github.com/webpack/webpack-dev-server/issues/147 https://github.com/webpack/webpack-dev-server/issues/1604 https://github.com/webpack/webpack-dev-server/issues/547 https://stackoverflow.com/questions/39632038/cannot-run-webpack-dev-server-inside-docker
Check:
Are if/else symmetric if foo = true else foo = false
Cross Reference all:
- CSS class names
- CSS IDs
- CSS data- attributes
Set breakpoints on all:
- DOM mutation function calls (setAttribute, $("#foo").val("bar"), cloneNode(), etc)
- Assignment statements
Tight Coupling
hardware_coupled_design_patterns:
description: >
Design approaches that rely on specific hardware behavior, timing characteristics,
memory layout, or I/O precision. Common in embedded systems, consoles, and low-level software.
terminology:
- platform_dependent_design:
description: Architecture that assumes specific hardware capabilities or quirks.
- hardware_aware_optimization:
description: Tuning performance by exploiting timing, cache, or memory layout details of the target hardware.
- bare_metal_programming:
description: Programming directly against hardware without abstractions such as operating systems.
- cycle_accurate_design:
description: Logic synchronized to instruction cycles or clock signals for predictable timing.
- tightly_coupled_io:
description: I/O logic that relies on precise read/write timing rather than buffered or asynchronous interfaces.
related_concepts:
- temporal_coupling:
description: System elements depend on specific execution timing or order.
- memory_mapped_io:
description: Control and monitor devices via predefined memory address regions.
- polling_loops_with_calibrated_delay:
description: Busy-wait loops designed with delay to match expected I/O timing.
- bit_banging:
description: Manually driving signal lines via software with microsecond timing control.
common_applications:
- console_game_engines
- firmware for embedded devices
- device drivers with low-level access
- signal processing routines on constrained platforms
- emulators for timing-sensitive legacy systems
challenges:
- limited portability across platforms
- difficult to emulate accurately
- fragile under hardware changes or virtualization
Keyboard Specific Security Issues
1. Keyboard-Only Authentication Bypass
- Description: Keyboard navigation skips client-side validation or triggers unintended auth flows.
- Impact: Bypass of login gates, 2FA prompts, or CAPTCHA challenges.
- Bug Bounty Relevance: High—often classified as auth logic flaw or TOCTOU bypass.
2. Focus Hijacking for Clickjacking or Phishing
- Description: Malicious elements steal focus to redirect keyboard input.
- Impact: Users unknowingly type into hidden or spoofed fields.
- Bug Bounty Relevance: Medium to high—can be escalated to phishing or UI redress attacks.
3. Keyboard Shortcut Injection or Hijack
- Description: Unvalidated input triggers privileged actions via keyboard shortcuts.
- Impact: Execution of admin actions, unintended data deletion, or privilege escalation.
- Bug Bounty Relevance: High—especially in apps with rich keyboard shortcut interfaces.
4. Tab Navigation to Hidden or Sensitive Elements
- Description: Keyboard-only users can reach elements not exposed via mouse.
- Impact: Access to hidden admin panels, debug UIs, or deprecated flows.
- Bug Bounty Relevance: Medium—often classified as information disclosure or access control flaw.
5. Inconsistent Keyboard Event Sanitization
- Description: Key events (e.g. Enter, Escape) trigger actions without proper context checks.
- Impact: Form submission without CSRF tokens, modal escapes, or unintended state changes.
- Bug Bounty Relevance: Medium to high—can lead to state manipulation or bypasses.
6. Accessibility Disclosure Vectors
- Description: Keyboard-only navigation exposes internal structure or metadata.
- Impact: Reveals hidden fields, internal IDs, or debug labels.
- Bug Bounty Relevance: Low to medium—valuable in chained exploits or recon.
7. Keyboard-Induced Race Conditions
- Description: Rapid key input triggers overlapping async actions.
- Impact: Double submissions, TOCTOU bugs, or inconsistent state.
- Bug Bounty Relevance: High—especially in financial or transactional systems.
8. Keyboard Trap as Denial of Service
- Description: Users locked into a component with no escape via keyboard.
- Impact: Functional DoS for keyboard-only users.
- Bug Bounty Relevance: Medium—especially in accessibility-focused bounty programs.
Remote Debugging
- https://appletoolbox.com/use-web-inspector-debug-mobile-safari/
- https://general.support.brightcove.com/developer/debugging-mobile-devices.html
References
- https://www.gamasutra.com/blogs/MikeActon/20170828/304529/Last_Inner_Product.php
- https://games.slashdot.org/story/14/05/18/034237/the-technical-difficulty-in-porting-a-ps3-game-to-the-ps4
- https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/JavaScript
- https://v8.dev/docs/stack-trace-api
- http://www.drdobbs.com/tools/visual-debugging-with-ddd/184404519?pgno=1
- https://stackoverflow.com/questions/36069731/how-to-unit-test-api-calls-with-mocked-fetch-in-react-native-with-jest
- https://stackoverflow.com/questions/21267250/how-do-you-spy-on-a-call-back-in-an-ajax-call-with-jasmine
- https://developer.apple.com/documentation/foundation/nsautoreleasepool/1520553-drain
- http://matteogobbi.github.io/blog/2014/09/28/autorelease-under-the-hood/
- https://opensource.apple.com/source/objc4/objc4-493.9/runtime/objc-arr.mm
- https://www.mediawiki.org/wiki/Node.js_debugging
- https://nodejs.org/api/errors.html
- https://nodejs.org/en/blog/npm/peer-dependencies/
- https://zetafleet.com/blog/2010/06/improve-javascript-error-reporting-with-tracekit.html
- https://webpack.js.org/contribute/debugging/
- http://erikaybar.name/webpack-source-maps-in-chrome/
- https://www.reddit.com/r/javascript/comments/9u4kis/basics_how_to_stop_using_consolelog_and_start/
- https://nodejs.org/api/events.html#events_error_events
- https://stackoverflow.com/questions/5178869/listen-to-all-emitted-events-in-node-js
- https://strongloop.com/strongblog/comparing-node-js-promises-trycatch-zone-js-angular/
- https://nodejs.org/en/docs/guides/debugging-getting-started/
- https://github.com/forcedotcom/LightningTestingService/blob/master/lightning-component-tests/test/default/staticresources/lts_mochaJs.resource